最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring裝配Bean之用Java代碼安裝配置bean詳解

 更新時間:2017年10月22日 14:53:46   作者:wuxiwei  
這篇文章主要給大家介紹了關(guān)于Spring裝配Bean之用Java代碼安裝配置bean的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧。

前言

本文主要給大家介紹了關(guān)于Spring之利用Java代碼安裝配置bean的相關(guān)內(nèi)容,盡管通過組件掃描和自動裝配實現(xiàn)Spring的自動化配置很方便也推薦,但是有時候自動配置的方式實現(xiàn)不了,就需要明確顯示的配置Spring。比如說,想要將第三方庫中的組件裝配到自己的應用中,這樣的情況下,是沒辦法在它的類上添加 @Compnent和 @Autowired注解的。

在這種情況下,需要使用顯示裝配的方式,可以分別通過Java和XML實現(xiàn),推薦使用Java的方式,因為更加強大,類型安全并且重構(gòu)友好,因為就和我們應用所寫的Java代碼一樣。但是雖然JavaConfig和其他的java代碼沒有區(qū)別,但是在概念上是不同的。所以JavaConfig不應該出現(xiàn)業(yè)務邏輯的代碼,并建議放在單獨的包中,做隔離。

創(chuàng)建配置類

在之前,看到過JavaConfig,我們再看一下:

package soundsystem;
import org.springframework.context.annotation.Configuration;

@Configuration
public class CDPlayerConfig {
 
}

創(chuàng)建javaConfig類的關(guān)鍵在于為其添加 @Configuration注解,@Configuration注解表明這個類是一個配置類,該類應該包含Spring上下文中如何創(chuàng)建bean的細節(jié)。之前我們都是依賴組件掃描來發(fā)現(xiàn)Spring應該創(chuàng)建的bean。盡管可以同時使用組件掃描和顯示配置,但是現(xiàn)在我們?nèi)サ袅?@CompnentScan注解,現(xiàn)在的CDPlayerConfig類就沒有任何作用了。如果現(xiàn)在運行之前的測試類,就會失敗,并且出現(xiàn)BeanCreationException異常。

聲明簡單的bean

在JavaConfig中聲明bean,需要編寫一個方法,該方法會創(chuàng)建所需類型的實例,然后這個方法添加 @Bean注解。

@Bean
public CompactDisc sgtPeppers() {
 return new SgtPeppers();
}

@Bean注解會告訴Spring這個方法會返回一個對象,該對象要注冊為Spring應用上下文中的bean。

默認情況下,bean的ID與帶有 @Bean注解的方法名是一樣的,在上面的例子中,bean的ID將會是sgtPeppers。如果想設置不同的ID,那么可以重命名該方法,也可以通過name屬性指定一個不通的名字:

@Bean(name="lonelyHeartsClubBand")
public CompactDisc sgtPeppers() {
 return new SgtPeppers();
}

借助JavaConfig實現(xiàn)注入

前面聲明的CompactDisc很簡單,因為沒有其他依賴。但現(xiàn)在,我們需要聲明CDPlayer bean,它依賴于CompactDisc。

在javaConfig中裝配bean的最簡單方式就是引用創(chuàng)建bean的方法。

@Bean
public CDPlayer cdPlayer() {
 return new CDPlayer(sgtPeppers());
}

注意:看起來,CompactDisc是通過調(diào)用sgtPeppers()得到的,但情況并非完全如此。因為sgtPeppers()方法添加了 @Bean注解,Spring會攔截所有對它的調(diào)用,并確保直接返回該方法創(chuàng)建的bean,而不是每次都進行實際的調(diào)用。
假如引入另外一個CDPlayer bean,他和之前的那個bean完全一樣:

@Bean
public CDPlayer cdPlayer() {
 return new CDPlayer(sgtPeppers());
}

@Bean
public CDPlayer anotherCDPlayer() {
 return new CDPlayer(sgtPeppers());
}

如果sgtPeppers()的調(diào)用是實際的方法調(diào)用,那么每個CDPlayer實例都會有一個特有的SgtPeppers實例。如果是實際的CD播放器和CD光盤的話,很ok,物理上沒辦法共用一張CD光盤在兩個CD播放器上。

但是,在軟件中,我們完全是可以將同一個SgtPeppers實例注入到任意數(shù)量的其它的bean中。默認情況下,Spring的bean都是單例的,我們并沒有必要為第二個CDPlayer bean創(chuàng)建完全相同的SgtPeppers實例。

根本的問題在于,通過調(diào)用方法的方式來引入bean有點困惑,還有另外一種方式:

@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc) {
 return new CDPlayer(compactDisc);
}

通過這種方式引入其它的bean通常是最佳的方式,因為Spring并不會要求將CompactDisc聲明放在同一個配置文件中,甚至不一定是JavaConfig中,可以將配置分布在XML、多個配置類以及自動掃描裝配的bean中。

另外,這里的CDPlayer的構(gòu)造器實現(xiàn)了DI功能,但是我們完全可以根據(jù)需求實例化CDPlayer,比如想通過Setter方法注入CompactDisc的話,可以這樣:

@Bean
public CDPlayer cdPlayer(CompactDisc compactDisc) {
 CDPlayer cdPlayer = new CDPlayer(compactDisc);
 cdPlayer.setCompactDisc = compactDisc;
 return cdPlayer;
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Maven高級的聚合和繼承的實現(xiàn)

    Maven高級的聚合和繼承的實現(xiàn)

    在軟件開發(fā)中,隨著項目規(guī)模的擴大,單個模塊的開發(fā)方式逐漸轉(zhuǎn)變?yōu)槎嗄K開發(fā),這種方式帶來了項目管理上的挑戰(zhàn),其中最常見的問題是模塊間的依賴管理和版本控制問題,本文就來介紹一下
    2024-10-10
  • SpringBoot通過RedisTemplate執(zhí)行Lua腳本的方法步驟

    SpringBoot通過RedisTemplate執(zhí)行Lua腳本的方法步驟

    這篇文章主要介紹了SpringBoot通過RedisTemplate執(zhí)行Lua腳本的方法步驟,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • SpringCloud中Gateway的使用教程詳解

    SpringCloud中Gateway的使用教程詳解

    SpringCloud?Gateway是Spring體系內(nèi)的一個全新項目,它旨在為微服務架構(gòu)提供一種簡單有效的統(tǒng)一的API路由管理方式。本文就來為大家詳細講講Gateway的使用教程,需要的可以參考一下
    2022-08-08
  • SpringCloud負載均衡實現(xiàn)定向路由詳情

    SpringCloud負載均衡實現(xiàn)定向路由詳情

    這篇文章主要介紹了SpringCloud負載均衡實現(xiàn)定向路由詳情,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-08-08
  • springboot整合knife4j全過程

    springboot整合knife4j全過程

    這篇文章主要介紹了springboot整合knife4j全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java項目命名規(guī)范參考

    Java項目命名規(guī)范參考

    在實際項目開發(fā)中,命名規(guī)范的遵守可以提高代碼的可讀性和可維護性,本文就來介紹一下Java項目命名規(guī)范參考,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • java安全編碼指南之:對象構(gòu)建操作

    java安全編碼指南之:對象構(gòu)建操作

    這篇文章主要介紹了java安全編碼指南之:對象構(gòu)建操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Spring Boot快速實現(xiàn) IP地址解析的示例詳解

    Spring Boot快速實現(xiàn) IP地址解析的示例詳解

    這篇文章主要介紹了Spring Boot快速實現(xiàn)IP地址解析,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 詳解Java如何在Array和List之間進行轉(zhuǎn)換

    詳解Java如何在Array和List之間進行轉(zhuǎn)換

    這篇文章主要為大家介紹了詳解Java如何在Array和List之間進行轉(zhuǎn)換的方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • CGLIB代理的使用與原理解析

    CGLIB代理的使用與原理解析

    這篇文章主要介紹了CGLIB代理的使用與原理解析,靜態(tài)代理和JDK 代理模式都要求目標對象是實現(xiàn)一個接口,但是有時候目標對象只是一個單獨的對象,并沒有實現(xiàn)任何的接口,這個時候可使用目標對象子類來實現(xiàn)代理,這就是Cglib代理,需要的朋友可以參考下
    2023-09-09

最新評論

杨浦区| 大洼县| 鄂伦春自治旗| 石河子市| 荥阳市| 卓尼县| 玉龙| 东乡族自治县| 新巴尔虎左旗| 和林格尔县| 肃南| 敦煌市| 潍坊市| 昌吉市| 东乡县| 聂拉木县| 乐东| 青州市| 蛟河市| 社旗县| 高邑县| 深州市| 长子县| 巴彦县| 抚顺市| 托里县| 台湾省| 镇远县| 达孜县| 自治县| 保山市| 诸城市| 宁南县| 庆安县| 乌审旗| 宣汉县| 临海市| 沅陵县| 富宁县| 望江县| 南召县|