日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

@Configuration(proxyBeanMethods = true)

作者:太自由 更新時間: 2023-12-16 編程語言

本文簡要總結下SpringBoot配置類使用的注解@Configuration的屬性proxyBeanMethods屬性的作用

(2) 給IOC容器中導入組件有如下幾種方式:

    /**
     * 給容器中添加組件的幾種方式:
     * 1. 包掃描+組件標注注解的方式:@ComponentScan + 注解(@Controller,@Service,@Repository,@Component),局限性在于只有我們自己寫的類才能使用此種方式
     * 2. @Bean注解導入第三方包里面的組件:在配置類中,使用@Bean注解給容器添加組件,好處是可以導入第三方的組件到容器中
     * 3. @Import快速給容器中導入一個組件
     *      3.1、@Import(要導入到容器中的組件),id默認是組件的全類名
     *      3.2、@Import(使用ImportSelector導入需要的組件的全類名)
     *      3.3、@Import(使用ImportBeanDefinitionRegister手動注冊bean到容器中)
     * 4. 通過Spring提供的FactoryBean向容器中注入組件
     *      4.1、 默認獲取到的似乎工程bean調用getObject創建的對象
     *      4.2、 要獲取工廠Bean本身,需要給id前面加一個&,如&colorFactoryBean
     * 5.使用@ImportResource注解導入xml配置文件(可以把古老項目中在xml中配置的bean組件導入到IOC    
         容器中來)
     */

(2)首先,明確的一點是,使用了@Configuration注解的配置類的目的是給IOC容器中添加組件,在配置類中使用@Bean注解標注在方法上:

Configuration(proxyBeanMethods = true) //告訴SpringBoot這是一個配置類 == 配置文件
public class MyConfig {

    /**
     * Full:外部無論對配置類中的這個組件注冊方法調用多少次獲取的都是之前注冊容器中的單實例對象
     * @return
     */

    @Bean //給容器中添加組件。以方法名作為組件的id。返回類型就是組件類型。返回的值,就是組件在容器中的實例
    public User user01(){
        User user = new User("zhangSan", 18);
        //user組件依賴了Pet組件
        user.setPet(tomcatPet());
        return user;
    }

    @Bean("tom")
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }

}

(3)要研究的問題是:@Configuration注解的proxyBeanMethods屬性取值true和false的區別:

  • 【Full模式】當proxyBeanMethods=true時,外部無論對配置類中的這個組件注冊方法調用多少次獲取的都是之前注冊容器中的單實例對象,也就是說,保證每個@Bean方法被調用多少次返回的組件都是單例的,所以如果proxyBeanMethods=true時,每次從外部調用@Bean方法時,都會進行判斷操作,判斷容器中是否有這個組件,會比較耗時,也即Full模式
  • 【Lite模式】當proxyBeanMethods=false時,每個@Bean方法被調用多少次返回的組件都是新創建的,即,當從外部調用@Bean方法時,不會去判斷容器中是否有這個組件,而是直接新創建一個組件然后返回,比Full模式效率高。
  • 總結就是:如果配置類中的組件有依賴關系,則應該使用Full模式,即【proxyBeanMethods=true】,否則應該使用Lite模式,即【proxyBeanMethods=false】
  • 補充說明

那自然會想到SpringBoot項目的主配置類也是一個配置類啊,那主配置類使用的是什么模式呢(即:主配置類使用的是Full模式還是Lite模式呢),查看主配置類發現其采用的是Full模式,如下圖:

原文鏈接:https://blog.csdn.net/qq_23388169/article/details/124562098

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新