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

詳解Spring中@Component和@Configuration的區(qū)別

 更新時間:2023年07月07日 10:03:28   作者:Javaer2Leader  
一直有同學搞不清Spring中@Component和@Configuration這兩個注解有什么區(qū)別,所以這篇文章小編就給大家簡單介紹一下@Component和@Configuration的區(qū)別,需要的朋友可以參考下

總結

直接上總結:加了@Configuration的類會被CGLIB進行動態(tài)代理,不加或者加@Component注解則不會被代理

正文

首先我們都知道使用Spring的@ComponentScan注解可以掃描到@Configuration和@Component的類,并將其交由Spring容器管理,默認會放入單例池中。

新建了一個BeanConfig類用來測試結果:

@Configuration
public class BeanConfig {
}

通過上下文獲取IOC容器中的BeanConfig,發(fā)現(xiàn)確實是被CGLIB進行了代理。

執(zhí)行查看上下文中beanFactory的單例池中確實存在。

將BeanConfig類的@Configuration注解改為@Component后再看一下則顯示沒有被CGLIB代理。

問題

那么Spring為什么設計@Configuration注解修飾的Bean要被動態(tài)代理?

先說結果:Spring的目的是讓@Configuration注解的類中被@Bean注解的方法生成的對象是單例,那如何使一個方法每次生成返回的對象都是同一個,代理就是其中一種方式。

首先@Configuration注解的作用是用于定義配置類來替換XML配置文件,被注解的類內部包含有一個或多個被@Bean注解的方法,這些方法會被用于構建BeanDefinition,初始化Spring容器。

也就是說@Configuration的主要目的是搭配@Bean注解替代XML配置文件來向Spring容器注入Bean。

我們在BeanConfig類中增加兩個@Bean注解的方法:

@Configuration
public class BeanConfig {
    //@Scope("prototype")
    @Bean
    public Role role(){
        return new Role();
    }
    @Bean
    public User user(){
        Role r1=role();
        Role r2=role();
        System.out.println(r1==r2);
        return new User();
    }
}

通過Spring的處理,直接調用 @Configuration 注解中bean 方法,獲取的就是同一個對象,這樣想要直接使用某個@Bean注解的對象就不需要 @Autowired 注入了。

當然你非要在方法上加上注解@Scope("prototype"),每次調用該方法還是會生成不同的對象。

源碼

注解配置讀取器:向BeanDefinitionMap中添加了7個元素,其中一個就是ConfigurationClassPostProcessor

org.springframework.context.annotation.AnnotationConfigApplicationContext#AnnotationConfigApplicationContext()

執(zhí)行所有的BeanFactoryPostProcessor的postProcessorBeanFactory()方法

org.springframework.context.support.AbstractApplicationContext#refresh() 方法中的invokeBeanFactoryPostProcessors(beanFactory) org.springframework.context.annotation.ConfigurationClassPostProcessor#postProcessBeanFactory

查找到所有帶有 @Configuration 注解的 bean 定義,然后在第二個 for 循環(huán)中對類進行增強

org.springframework.context.annotation.ConfigurationClassPostProcessor#enhanceConfigurationClasses

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

相關文章

  • Java 使用Socket正確讀取數(shù)據(jù)姿勢

    Java 使用Socket正確讀取數(shù)據(jù)姿勢

    這篇文章主要介紹了Java 使用Socket正確讀取數(shù)據(jù)姿勢,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java中對IO流的全面解析

    Java中對IO流的全面解析

    文章介紹了Java中IO流的分類,字符流和字節(jié)流的區(qū)別,以及字符流和字節(jié)流的常用類和方法,本文結合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2025-09-09
  • mybatis一級緩存和二級緩存的區(qū)別及說明

    mybatis一級緩存和二級緩存的區(qū)別及說明

    這篇文章主要介紹了mybatis一級緩存和二級緩存的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Java中區(qū)別.toString() ,(String),valueOf()方法

    Java中區(qū)別.toString() ,(String),valueOf()方法

    這篇文章主要介紹了Java中區(qū)別.toString() ,(String),valueOf()方法,需要的朋友可以參考下
    2017-01-01
  • SpringBoot controller接收txt文本文件實現(xiàn)方式

    SpringBoot controller接收txt文本文件實現(xiàn)方式

    文章介紹在Spring Boot Controller中接收文本文件的方法,需使用MultipartFile類并通過@RequestParam注解獲取,重點說明了獲取文件名、內容及保存文件的常用方法,并強調MultipartFile為接口,需通過注解實例化
    2025-09-09
  • 淺談servlet與jsp的關系

    淺談servlet與jsp的關系

    本文主要介紹了servlet與jsp的相關知識,并總結出servlet與jsp之間的關系,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • java 實現(xiàn)web項目啟動加載properties屬性文件

    java 實現(xiàn)web項目啟動加載properties屬性文件

    這篇文章主要介紹了java 實現(xiàn)web項目啟動加載properties屬性文件,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • IntelliJ?IDEA社區(qū)版2021.3配置SpringBoot項目詳細教程及失敗案例

    IntelliJ?IDEA社區(qū)版2021.3配置SpringBoot項目詳細教程及失敗案例

    IntelliJ?IDEA?2021.3.3是一款集成開發(fā)環(huán)境,用于Java和其他編程語言的開發(fā),下面這篇文章主要給大家介紹了關于IntelliJ?IDEA社區(qū)版2021.3配置SpringBoot項目詳細教程及失敗案例的相關資料,需要的朋友可以參考下
    2024-03-03
  • Java超詳細介紹抽象類與接口的使用

    Java超詳細介紹抽象類與接口的使用

    在類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類稱為抽象類,接口是Java中最重要的概念之一,它可以被理解為一種特殊的類,不同的是接口的成員沒有執(zhí)行體,是由全局常量和公共的抽象方法所組成,本文給大家介紹Java抽象類和接口,感興趣的朋友一起看看吧
    2022-05-05
  • kafka提交偏移量失敗導致重復消費的解決

    kafka提交偏移量失敗導致重復消費的解決

    文章主要討論了在使用Spring Kafka時遇到的`KafkaException`,特別是與消費者組和偏移量提交相關的問題,文章解釋了Kafka消費者的心跳機制和`max.poll.interval.ms`配置的作用,并提供了如何在`application.yml`或`application.properties`文件中配置這些參數(shù)的示例
    2026-01-01

最新評論

泰顺县| 中江县| 鹤峰县| 夏邑县| 西乌| 巴东县| 陇西县| 涿州市| 嘉鱼县| 阆中市| 同心县| 塔城市| 大化| 乌鲁木齐市| 蒙城县| 浦城县| 张家界市| 宣汉县| 辰溪县| 金溪县| 长岭县| 静乐县| 太仆寺旗| 化隆| 揭西县| 鄂伦春自治旗| 永顺县| 漠河县| 汉中市| 安岳县| 会宁县| 东兰县| 泰安市| 措美县| 淮阳县| 吴堡县| 丰宁| 抚州市| 当雄县| 牙克石市| 汨罗市|