欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring注解中@Configuration和@Component到底有啥區(qū)別

 更新時間:2023年04月07日 11:11:44   作者:李巴巴  
之前一直搞不清@Component和@Configuration這兩個注解到底有啥區(qū)別,一直認為被這兩修飾的類可以被Spring實例化嘛,最近終于弄明白了,這篇文章主要給大家介紹了關于Spring注解中@Configuration和@Component到底有啥區(qū)別的相關資料,需要的朋友可以參考下

Spring 注解中 @Configuration 和 @Component 的區(qū)別總結(jié)為一句話就是:

@Configuration 中所有帶 @Bean 注解的方法都會被動態(tài)代理(cglib),因此調(diào)用該方法返回的都是同一個實例。而 @Conponent 修飾的類不會被代理,每實例化一次就會創(chuàng)建一個新的對象。

@Configuration 注解的源代碼中,使用了 @Component 注解:

從定義來看, @Configuration 注解本質(zhì)上還是 @Component,因此 <context:component-scan/> 或者 @ComponentScan 都能處理 @Configuration 注解的類。

下面我們通過一個例子來說明上述情況:

// 使用@Configuration和@Bean注解創(chuàng)建Room實例和People實例,并注入進spring容器
@Configuration
public class RoomPeopleConfig {
 
    @Bean
    public Room room() {
        Room room = new Room();
        room.setId(1);
        room.setName("房間");
        room.setPeople(people());// 在創(chuàng)建Room實例時,再調(diào)用一次People()創(chuàng)建一個People實例
        return room;
    }
 
    @Bean
    public People people() {
        People people = new People();
        people.setId(1);
        people.setName("小明");
        return people;
    }
 
}
 
// 下面是測試代碼
@SpringBootTest
@ContextConfiguration(classes = Application.class)
public class ConfigurationTests {
 
    @Autowired
    private Room room;
 
    @Autowired
    private People people;
 
 
    @Test
    public void test() {
        System.out.println(people == room.getPeople() ? "是同一個實例" : "不是同一個實例");
    }
 
}

輸出結(jié)果:

如果將 @Configuration 換成 @Component ,則輸出:

從上面的結(jié)果可以發(fā)現(xiàn)使用 @Configuration 時在 people 和 spring 容器之中的是同一個對象,而使用 @Component 時是不同的對象。這就是因為 @Configuration 使用了 cglib 動態(tài)代理,返回的是同一個實例對象。

雖然 @Component 注解也會當做配置類,但是并不會為其生成 CGLIB 代理 Class,所以在生成 room 對象時和生成 people 對象時調(diào)用 people( ) 方法執(zhí)行了兩次 new 操作,所以是不同的對象。當使用 @Configuration 注解時,生成當前對象的子類 Class,并對方法攔截,第二次調(diào)用 people()方法時直接從 BeanFactory 之中獲取對象,所以得到的是同一個對象。

其具體底層的實現(xiàn)原理可以去看一看這篇文章:configuration和component區(qū)別底層實現(xiàn)

總結(jié)

到此這篇關于Spring注解中@Configuration和@Component到底有啥區(qū)別的文章就介紹到這了,更多相關@Configuration和@Component的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java中不定長參數(shù)的實例用法

    java中不定長參數(shù)的實例用法

    在本篇文章里小編給大家分享的是關于java中不定長參數(shù)的使用方法以及相關代碼內(nèi)容,有興趣的朋友們可以學習參考下。
    2020-02-02
  • Java利用Socket類實現(xiàn)TCP通信程序

    Java利用Socket類實現(xiàn)TCP通信程序

    TCP通信能實現(xiàn)兩臺計算機之間的數(shù)據(jù)交互,通信的兩端,要嚴格區(qū)分為客戶端與服務端,下面我們就來看看Java如何利用Socket類實現(xiàn)TCP通信程序吧
    2024-02-02
  • Spring?Data?Elasticsearch?5.x實現(xiàn)單詞糾錯和自動補全

    Spring?Data?Elasticsearch?5.x實現(xiàn)單詞糾錯和自動補全

    這篇文章主要為大家介紹了Spring?Data?Elasticsearch?5.x實現(xiàn)單詞糾錯和自動補全示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • java實現(xiàn)1M圖片壓縮優(yōu)化到100kb實現(xiàn)示例

    java實現(xiàn)1M圖片壓縮優(yōu)化到100kb實現(xiàn)示例

    這篇文章主要為大家介紹了java實現(xiàn)1M圖片壓縮優(yōu)化到100kb示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • java中自定義Spring Security權限控制管理示例(實戰(zhàn)篇)

    java中自定義Spring Security權限控制管理示例(實戰(zhàn)篇)

    本篇文章主要介紹了java中自定義Spring Security權限控制管理示例(實戰(zhàn)篇) ,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-02-02
  • 一篇文章帶你Java Spring開發(fā)入門

    一篇文章帶你Java Spring開發(fā)入門

    這篇文章主要為大家詳細介紹了Java Spring開發(fā)入門學習教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-09-09
  • Java全面解析IO流相關知識

    Java全面解析IO流相關知識

    這篇文章主要介紹了IO流相關知識,包括File,字節(jié)流,字符流,特殊操作流(標準輸入流,標準輸出流,對象序列化與反序列化,properties與IO流結(jié)合)相關知識的總結(jié)
    2021-08-08
  • JAVA多線程中join()方法的使用方法

    JAVA多線程中join()方法的使用方法

    雖然關于討論線程join()方法的博客已經(jīng)非常極其特別多了,但是前幾天我有一個困惑卻沒有能夠得到詳細解釋,當系統(tǒng)中正在運行多個線程時,join()到底是暫停了哪些線程,所以本文詳細解釋一下希望能幫助到和我有相同困惑的同學
    2021-05-05
  • 如何通過一張圖搞懂springBoot自動注入原理

    如何通過一張圖搞懂springBoot自動注入原理

    這篇文章主要給大家介紹了關于如何通過一張圖搞懂springBoot自動注入原理的相關資料,文中通過圖文以及實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2022-02-02
  • SpringBoot中多環(huán)境配置和@Profile注解示例詳解

    SpringBoot中多環(huán)境配置和@Profile注解示例詳解

    這篇文章主要介紹了SpringBoot中多環(huán)境配置和@Profile注解,本文結(jié)合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01

最新評論