91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring注解中@Configuration和@Component的區別是什么

發布時間:2023-04-07 17:25:02 來源:億速云 閱讀:258 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“Spring注解中@Configuration和@Component的區別是什么”,內容詳細,步驟清晰,細節處理妥當,希望這篇“Spring注解中@Configuration和@Component的區別是什么”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

Spring 注解中 @Configuration 和 @Component 的區別總結為一句話就是:

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

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

Spring注解中@Configuration和@Component的區別是什么

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

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

// 使用@Configuration和@Bean注解創建Room實例和People實例,并注入進spring容器
@Configuration
public class RoomPeopleConfig {
 
    @Bean
    public Room room() {
        Room room = new Room();
        room.setId(1);
        room.setName("房間");
        room.setPeople(people());// 在創建Room實例時,再調用一次People()創建一個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() ? "是同一個實例" : "不是同一個實例");
    }
 
}

輸出結果:

Spring注解中@Configuration和@Component的區別是什么

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

Spring注解中@Configuration和@Component的區別是什么

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

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

讀到這里,這篇“Spring注解中@Configuration和@Component的區別是什么”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇巴县| 农安县| 聂拉木县| 奉新县| 宜兰县| 盱眙县| 商河县| 徐州市| 望城县| 射阳县| 察隅县| 那坡县| 泰州市| 木里| 临沂市| 津南区| 宁城县| 梁平县| 福建省| 乌苏市| 三明市| 浏阳市| 攀枝花市| 印江| 洮南市| 临洮县| 晋州市| 青冈县| 铁力市| 文成县| 成安县| 宜君县| 永德县| 湖北省| 仙游县| 台安县| 武山县| 石泉县| 鄢陵县| 泰兴市| 贡嘎县|