亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

總結(jié)

直接上總結(jié):加了@Configuration的類會(huì)被CGLIB進(jìn)行動(dòng)態(tài)代理,不加或者加@Component注解則不會(huì)被代理

正文

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

新建了一個(gè)BeanConfig類用來測(cè)試結(jié)果:

@Configuration
public class BeanConfig {
}

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

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

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

問題

那么Spring為什么設(shè)計(jì)@Configuration注解修飾的Bean要被動(dòng)態(tài)代理?

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

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

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

我們?cè)贐eanConfig類中增加兩個(gè)@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的處理,直接調(diào)用 @Configuration 注解中bean 方法,獲取的就是同一個(gè)對(duì)象,這樣想要直接使用某個(gè)@Bean注解的對(duì)象就不需要 @Autowired 注入了。

當(dāng)然你非要在方法上加上注解@Scope("prototype"),每次調(diào)用該方法還是會(huì)生成不同的對(duì)象。

源碼

注解配置讀取器:向BeanDefinitionMap中添加了7個(gè)元素,其中一個(gè)就是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 定義,然后在第二個(gè) for 循環(huán)中對(duì)類進(jìn)行增強(qiáng)

org.springframework.context.annotation.ConfigurationClassPostProcessor#enhanceConfigurationClasses

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

相關(guān)文章

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

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

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

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

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

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

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

    Java下載文件的4種方式總結(jié)

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

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

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

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

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

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

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

    簡(jiǎn)單了解JAVA內(nèi)存區(qū)域效果知識(shí)

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

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

    SpringMVC是一種基于Java,實(shí)現(xiàn)了Web?MVC設(shè)計(jì)模式,請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)Web框架,即使用了MVC架構(gòu)模式的思想,將Web層進(jìn)行職責(zé)解耦?;谡?qǐng)求驅(qū)動(dòng)指的就是使用請(qǐng)求-響應(yīng)模型,框架的目的就是幫助我們簡(jiǎn)化開發(fā),SpringMVC也是要簡(jiǎn)化我們?nèi)粘eb開發(fā)
    2023-02-02
  • MyBatisPlus-QueryWrapper多條件查詢及修改方式

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

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

最新評(píng)論