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

詳解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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring MVC利用Swagger2如何構建動態(tài)RESTful API詳解

    Spring MVC利用Swagger2如何構建動態(tài)RESTful API詳解

    這篇文章主要給大家介紹了關于在Spring MVC中利用Swagger2如何構建動態(tài)RESTful API的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧。
    2017-10-10
  • SpringBoot配置Spring?Security的實現(xiàn)示例

    SpringBoot配置Spring?Security的實現(xiàn)示例

    本文主要介紹了SpringBoot配置Spring?Security的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-10-10
  • 如何使用Java生成PDF文檔詳解

    如何使用Java生成PDF文檔詳解

    這篇文章主要給大家介紹了關于如何使用Java生成PDF文檔的相關資料,PDF是可移植文檔格式,是一種電子文件格式,具有許多其他電子文檔格式無法相比的優(yōu)點,需要的朋友可以參考下
    2023-07-07
  • Java下載文件的4種方式總結

    Java下載文件的4種方式總結

    這篇文章主要給大家總結介紹了關于Java下載文件的4種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • java參數(shù)傳值代碼舉例

    java參數(shù)傳值代碼舉例

    在編程中往方法中傳遞參數(shù)的方法往往有兩種,一種是值傳遞,一種是引用傳遞,而在java中所有的參數(shù)傳遞全部都是值傳遞,這篇文章主要給大家介紹了關于java參數(shù)傳值的相關資料,需要的朋友可以參考下
    2024-03-03
  • JDK版本修改不生效的解決方法

    JDK版本修改不生效的解決方法

    本文主要介紹了在配置新電腦環(huán)境時遇到JDK版本切換失敗的問題,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-03-03
  • Spring實戰(zhàn)之FileSystemResource加載資源文件示例

    Spring實戰(zhàn)之FileSystemResource加載資源文件示例

    這篇文章主要介紹了Spring實戰(zhàn)之FileSystemResource加載資源文件,結合實例形式分析了spring FileSystemResource加載xml資源文件的具體實現(xiàn)步驟與相關操作技巧,需要的朋友可以參考下
    2019-12-12
  • 簡單了解JAVA內存區(qū)域效果知識

    簡單了解JAVA內存區(qū)域效果知識

    這篇文章主要介紹了簡單了解JAVA內存區(qū)域效果知識,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • SpringMVC?bean加載控制的實現(xiàn)分析

    SpringMVC?bean加載控制的實現(xiàn)分析

    SpringMVC是一種基于Java,實現(xiàn)了Web?MVC設計模式,請求驅動類型的輕量級Web框架,即使用了MVC架構模式的思想,將Web層進行職責解耦。基于請求驅動指的就是使用請求-響應模型,框架的目的就是幫助我們簡化開發(fā),SpringMVC也是要簡化我們日常Web開發(fā)
    2023-02-02
  • MyBatisPlus-QueryWrapper多條件查詢及修改方式

    MyBatisPlus-QueryWrapper多條件查詢及修改方式

    這篇文章主要介紹了MyBatisPlus-QueryWrapper多條件查詢及修改方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論