国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring——更快捷的存儲 / 獲取Bean對象

這篇具有很好參考價值的文章主要介紹了Spring——更快捷的存儲 / 獲取Bean對象。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

本人是一個普通程序猿!分享一點自己的見解,如果有錯誤的地方歡迎各位大佬蒞臨指導,如果你也對編程感興趣的話,互關一下,以后互相學習,共同進步。這篇文章能夠幫助到你的話,勞請大家點贊轉發(fā)支持一下!


一、存儲 Bean 對象

Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

上篇文章中,向Spring容器中添加對象,還要去配置文件里手動添加,這貌似并不比new便捷。

而Spring項目中呢,往往采用更加便捷的 “注解” 來向Spring容器中添加對象。


類注解

要想將 對象存儲到 Spring 中,一共有兩種注解類型可以實現:

  • 類注解: @Controller、@Service、@Repository、@Component、@Configuration 。
  • 方法注解: @Bean。

為什么有五個類注解

類注解一共有五個,但是這五個類注解的功能可以說是一模一樣。

那么功能一樣,有一個不就好了,為什么還要有五個呢?

這其中的道理,就好像筆記本類型,有輕薄本,辦公本,游戲本。
他們不也都是筆記本嗎,為什么還要分成三種呢?
因為人們可以從這個類型就看出筆記本更適合干什么。
輕薄本,更加輕薄,便于攜帶。
辦公本,更加適合辦公。
游戲本,性能更強,適用于打游戲,與一些需要生產力的場景(視頻渲染,建模等)。


所以為什么會有五個功能相同的類注解呢?
在一個項目的開發(fā)中,往往需要多名程序員協(xié)同開發(fā),
而這五個類注解的目的就是為了讓 程序員看到類注解,就能直接了解當前類的用途。

  • @Controller:業(yè)務邏輯層,負責校驗參數的合法性。
  • @Service:服務層,負責業(yè)務組裝。
  • @Repository:數據持久層,負責實際業(yè)務處理。
  • @Configuration:配置層,負責存儲配置類。
  • @Component:工具層,負責存儲工具類。

Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

查看 @Controller、@Service、@Repository、@Configuration 的源碼可以發(fā)現,這些注解里面都有注解@Component,所以 這四個注解都是@Component的子類
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

  • 五個類注解功能相同,下面就只拿@Controller注解做例子講解了!?。?

使用類注解存儲對象

配置掃描路徑(重中之重)

在配置文件(這里我的配置文件是spring-config.xml)中,添加一行代碼即可。

<content:component-scan base-package=""></content:component-scan>

此時Spring就 只會掃描這個路徑對應的包中的注解,以及子包中有注解的類 ,并將注解類添加到容器中。

舉例 Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
我路徑對應的包是test包,所以此時:
Spring
只會掃描test包中的類,以及test的子包 demo包中的類。

不會掃描與test包同級的School類,也不會掃描與test包同級的example包中的類。

掃描路徑也是為了提升性能,在實際開發(fā)中,一個項目可能包含許多類,如果都掃描的話,那么就會影響性能,因此就有了掃描路徑,只掃描該路徑下的類。

  • 注意注意注意!!! 不在掃描路徑的包中的類,即便是這個包上一級中的類,同級的類,同一級包中的類,即便添加了注解,也不會被存儲到Spring容器中!?。。。。。。。。?!
  • 可以配置多個掃描路徑?。?!Spring會同時將這些路徑中的注解放到容器中。 Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

添加注解存儲 Bean 對象

五各類注解的使用方法相同,只拿@Controller注解做示范,想用其他注解,使用方法相同。

添加注解存儲對象有兩種方式:

注解中設置名字Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
這個value相當于給注解設置名字,然后根據名字在容器中查找取出對象。
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
有兩種設置名字的寫法,這兩種寫法都一樣。
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

注解中不給參數
此時就會根據類名來給你一個默認的名字。下面咱們看下給默認名字方法的源碼。Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
如果 類名的第一個字母與第二個字母都是大寫 ,那么他的 默認名字是原類名 。
如果 類名的第一個字母與第二個字母有一個不是大寫或都不是大寫 ,那么他的 默認名字是首字母小寫的類名。

Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端


方法注解

配置掃描路徑(重中之重)

上述類注解配置掃描路徑,這一個掃描路徑可以同時供類注解與方法注解使用,配置方法與類注解一致。


使用方法注解存儲對象

類注解是添加到某個類上的,而方法注解是放到某個方法上的,如以下代碼的實現。

方法注解的作用,就是將這個方法返回的對象存儲到容器中。

拿下面兩個類舉例:
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

方法注解有兩點需要注意
1??方法注解要搭配類注解使用。
不搭配類注解使用Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端> Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
可以看到不搭配類注解使用就會報錯
Spring只會掃描添加了類注解的類 里面是否有方法注解。

搭配類注解使用Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

方法注解搭配類注解時,類注解同樣生效,被類注解標記的類也會被存入容器中 。


2??添加方法注解的方法不能有參數(任何類型的參數都不行)。
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端


下面咱們就來講一講方法注解的命名吧!
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
方法注解@Bean,可以設置value與name設置哪個都行,都當名字用。
值得注意的是方法注解可以設置多個名字,當然也可以不設置名字。

不設置名字 Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

設置一個名字 Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

設置多個名字

Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

  • 注意?。?! 當你設置名字后,默認命名就失效了!!再用默認命名就會拋出異常
    Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

二、獲取 Bean 對象

獲取 bean 對象也叫做對象裝配,是把對象取出來放到某個類中,有時候也叫對象注入。(是放到類里??!

對象裝配(對象注入)的實現方法有以下 3 種

  • 屬性注入
  • Setter注入
  • 構造方法注入

@Autowired

這三種方式都可以由注解@Autowired實現的,只是實現方式不同 。

下面就用IoC容器模擬實現一對一家教的老師分配學生的場景來講解三種注入方法。
所需要用到的類,Student(代表一個學生),Students(學生表),Teacher(表示一個教師),App(啟動類/測試類)
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

Student類Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

Students類,通過方法注解@Bean將Student對象添加到IoC容器中。Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

Teacher類,在里面通過給student變量注入對象來演示三種對象注入的方式。Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端


屬性注入

使用示例:
Teacher類中的Student類型的student變量,就通過屬性注入的方法,在IoC容器中注入了對象 Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
屬性注入的工作原理就是通過你變量的類型,去IoC容器中找尋匹配的類型然后注入到對應的變量中!

BUG
假如IoC容器中有兩個相同變量的類型,此時就會有BUG。
修改Students代碼,讓他向IoC容器中添加兩個相同類型的對象。
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
解決方案1??:使變量名與@Bean的名字相同。
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
解決方案2??:@Autowired配合@Qualifier一起使用
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

屬性注入的優(yōu)缺點:
優(yōu)點
使用簡單。


缺點
1??:無法注入final修飾的變量。Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

2??:通用性問題,只適用于IoC容器。
修改代碼,Teacher類不在IoC容器中Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
此時就不會再進行屬性注入了!

3??:更容易違背單一設計原則


Setter注入

使用示例:Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
setter注入的工作原理就是通過你方法參數的類型,去IoC容器中找尋匹配的類型然后注入到參數中!
工作原理與屬性注入相同,所以BUG也相同,解決方案也相同。

BUG
假如IoC容器中有兩個相同變量的類型,此時就會有BUG。
修改Students代碼,讓他向IoC容器中添加兩個相同類型的對象。
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端


解決方案1??:使參數列表的變量名與@Bean的名字相同。
解決方案2??:@Autowired配合@Qualifier一起使用Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

setter注入的優(yōu)缺點:
優(yōu)點
通常Setter只Set一個屬性,所以Setter注入更符合單一設計的原則。


缺點
1??:無法注入final修飾的變量。
2??:setter注入的對象可以被改變,因為setter是一個方法,可能會被調用多次,因此注入的對象就被改變了。


構造方法注入

使用示例:Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
構造方法注入的工作原理就是通過構造方法方法參數的類型,去IoC容器中找尋匹配的類型然后注入到參數中!
工作原理與屬性注入相同,所以BUG也相同,解決方案也一半相同。

BUG
假如IoC容器中有兩個相同變量的類型,此時就會有BUG。
修改Students代碼,讓他向IoC容器中添加兩個相同類型的對象。
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端


解決方案:使參數列表的變量名與@Bean的名字相同。
Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端

構造方法注入的優(yōu)缺點:
優(yōu)點
1??可以注入final修飾的變量Spring——更快捷的存儲 / 獲取Bean對象,Java數據結構,spring,java,后端
2??:注入的對象不會被修改,因為構造方法只加載一次。
3??:構造方法注入可以保證注入對象完全初始化。
4??:構造方法注入通用性更好。



缺點
1??:寫法比屬性注入復雜。
2??:使用構造方法注入,無法解決循環(huán)依賴的問題。


@Resource

@Resource與@Autowired的使用方式方法一模一樣,但是這兩個注解也是有區(qū)別的。

@Resource與@Autowired的區(qū)別
1?? 出身不同 :@Resource來自于JDK,@Autowired來自于Spring框架。
2?? 支持參數不同 :@Resource支持很多參數設置,@Autowired只支持一個參數設置。(下篇文章介紹)
3?? 使用上的區(qū)別 :@Resource不支持構造方法注入,@Autowired支持構造方法注入。
4?? IDEA兼容性不同 :@Autowired在專業(yè)版IDEA中可能會誤報,@Resource不會。


總結

以上就是今天要講的內容,本文介紹了使用注解更快捷便利的存儲獲取Bean對象!

路漫漫不止修身,也養(yǎng)性。文章來源地址http://www.zghlxwxcb.cn/news/detail-618790.html

到了這里,關于Spring——更快捷的存儲 / 獲取Bean對象的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Spring中Bean對象的存儲與讀取

    Spring中Bean對象的存儲與讀取

    在項目的 pom.xml 中添加 Spring 支持 如何選定版本環(huán)境:打開官網,點擊github圖標 jdk8最后一個Spring版本是5.3.x,Spring6.0.x最低需要jdk17 版本沖突問題Maven自己處理 version : 可以選擇帶有 RELEASE結尾或者純數字結尾,這樣的版本更穩(wěn)定 項目下創(chuàng)建一個main方法的啟動類 存儲 Bean 之前

    2024年01月24日
    瀏覽(22)
  • Spring的存儲與獲取Bean

    Spring的存儲與獲取Bean

    關于 Spring 的創(chuàng)建及簡單的使用 可以參考這篇文章 之前的存儲方式是利用 bean id=\\\"\\\" class=\\\"\\\"/bean 進行存儲 但這種方式存在一個弊端 即需要存儲的 Bean 過多時, 手動添加過于繁瑣 利用注解可以有效規(guī)避這種情況 添加注解存儲 Bean 類注解 @Controller: 控制器存儲 @Service: 服務存儲 @

    2024年02月09日
    瀏覽(19)
  • 【Spring】(三)Spring 使用注解存儲和讀取 Bean對象

    【Spring】(三)Spring 使用注解存儲和讀取 Bean對象

    前面的文章詳細的介紹了 Spring 對象的創(chuàng)建,以及對 Bean 對象的存取操作,但是通過配置文件注冊 Bean 對象以及使用 ApplicationContext 或 BeanFactory 的方式獲取 Bean 對象的操作就顯得格外的復雜。因此,本文主要就是詳細介紹了一種更加簡單的方式來實現對 Bean 對象更加簡單的儲

    2024年02月14日
    瀏覽(19)
  • Spring更簡單的存儲和讀取Bean對象

    Spring更簡單的存儲和讀取Bean對象

    目錄 1.第一個Spring項目 2.存儲Bean對象 2.1 準備工作 2.2?五大類注解 2.3?方法注解@Bean 2.4 Bean對象的默認命名規(guī)則 3. 讀取Bean對象 3.1 屬性注入 3.2 setter注入 3.3 構造方法注入 3.4 注入異常問題 3.5 注入方式優(yōu)缺點 3.6 @Autowired和@Resource的區(qū)別 在學習更簡單的方式來讀取和存儲Bean對象

    2024年02月03日
    瀏覽(23)
  • 從 Spring 的創(chuàng)建到 Bean 對象的存儲、讀取

    從 Spring 的創(chuàng)建到 Bean 對象的存儲、讀取

    目錄 創(chuàng)建 Spring 項目: 1.創(chuàng)建一個 Maven 項目: ?2.添加 Spring 框架支持: 3.配置資源文件: 4.添加啟動類: Bean 對象的使用: 1.存儲 Bean 對象: 1.1 創(chuàng)建 Bean: 1.2 存儲 Bean 到容器內: 2.獲取 Bean 對象: 2.1 創(chuàng)建 Spring 上下文: 2.2 獲取指定 Bean 對象: ApplicationContext 和 BeanFactor

    2024年02月06日
    瀏覽(17)
  • Spring - 更簡單的獲取 Bean 對象

    Spring - 更簡單的獲取 Bean 對象

    目錄 二、獲取 Bean 對象(對象裝配或者對象注入) 1. 屬性注入 1.1 屬性注入的優(yōu)點和缺點: 2. Setter注入 ?2.1?Setter注入的優(yōu)點和缺點 3. 構造方法注入(spring 官方推薦的對象注入方式) 3.1?構造方法的優(yōu)點和缺點 4. @Autowired 注解 和 @Resource 注解的區(qū)別 4.1 @Autowired 和 @Source 的區(qū)

    2024年02月16日
    瀏覽(21)
  • 【JavaEE】Spring中注解的方式去獲取Bean對象

    【JavaEE】Spring中注解的方式去獲取Bean對象

    【JavaEE】Spring的開發(fā)要點總結(3) 在前面的代碼里,我們獲取Bean對象也比較麻煩: 本文章就是為了更方便地去獲取Bean對象~ 對象裝配 也叫 對象注入 那么有沒有對應的注解去實現這個功能呢? Spring提供的三種實現方法: 屬性注入 構造方法注入 Setter注入 而這種非明文獲取

    2024年02月15日
    瀏覽(26)
  • spring boot applicationContext.getBeansOfType 無法獲取所有bean對象

    ?代碼如上所示,我想在某個service中注入所有AvatarScanCallback類型bean對象,但是發(fā)現無法注入全部bean, 最后檢查發(fā)現是因為有些AvatarScanCallback的子對象中存在循環(huán)依賴問題導致此時只能獲取一部分。 ?

    2024年02月17日
    瀏覽(19)
  • spring(1):基于XML獲取Bean對象以及各種依賴注入方式

    1.1 根據id獲取 1.2 根據類型獲取 1.3 根據id和類型獲取 注意: 當根據類型獲取bean時,要求IOC容器中指定類型的bean有且只能有一個。 例如以下XML文件,當IOC容器中一共配置了兩個,根據類型獲取時會拋出異常。 根據類型來獲取bean時,在滿足bean唯一性的前提下,其實只是看:

    2024年01月25日
    瀏覽(56)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包