<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      springboot~@ConditionalOnMissingBean注解的作用

      @ConditionalOnMissingBean,它是修飾bean的一個注解,主要實現的是,當你的bean被注冊之后,如果而注冊相同類型的bean,就不會成功,它會保證你的bean只有一個,即你的實例只有一個,當你注冊多個相同的bean時,會出現異常,以此來告訴開發人員。
      exception

      代碼演示

      @Component
      public class AutoConfig {
          @Bean
          public AConfig aConfig() {
              return new AConfig("lind");
          }
      
          @Bean
          @ConditionalOnMissingBean(AMapper.class)
          public AMapper aMapper1(AConfig aConfig) {
              return new AMapperImpl1(aConfig);
          }
      
          @Bean
          public AMapper aMapper2(AConfig aConfig) {
              return new AMapperImpl2(aConfig);
          }
      }
      

      因為在aMapper1上面標識了AMapper類型的bean只能有一個實現 @ConditionalOnMissingBean(AMapper.class),所以在進行aMapper2注冊時,系統會出現上面圖上的異常,這是正常的。
      當我們把 @ConditionalOnMissingBean(AMapper.class) 去掉之后,你的bean可以注冊多次,這時需要用的@Primary來確定你要哪個實現;一般來說,對于自定義的配置類,我們應該加上@ConditionalOnMissingBean注解,以避免多個配置同時注入的風險。

      @Primary標識哪個是默認的bean

      
          @Bean
          public AMapper aMapper1(AConfig aConfig) {
              return new AMapperImpl1(aConfig);
          }
      
          @Bean
          @Primary
          public AMapper aMapper2(AConfig aConfig) {
              return new AMapperImpl2(aConfig);
          }
      

      上面代碼意義不大,@ConditionalOnMissingBean真正的意義是什么?

      上面我的測試代碼,在一個配置類中,注冊了兩個類型一樣的bean,這種設計沒什么實際意義,而@ConditionalOnMissingBean真正意義在于它的擴展性,即當你封裝一個組件時,你的組件有個默認的實現類,這時為默認的實現類bean上,添加@ConditionalOnMissingBean;而在外部,開發人員根據業務定義自己的bean,這時它就有意義了,當在外部出現多個相同類型bean時,spring會為我們選擇不帶@ConditionalOnMissingBean注解的實現;也就是說@ConditionalOnMissingBean是當沒有個性化bean時,提供一個默認的bean,這才是它的意義!

      注意你的@ConditionalOnMissingBean是修飾@Bean的,不能修飾@Component這些注釋的,它會失去作用。

      @ConditionalOnProperty

      通過其三個屬性prefix,name以及havingValue來實現的,其中prefix表示配置文件里節點前綴,name用來從application.properties中讀取某個屬性值,havingValue表示目標值。

      • 如果該值為空,則返回false;
      • 如果值不為空,則將該值與havingValue指定的值進行比較,如果一樣則返回true;否則返回false。
      • 返回值為false,則該configuration不生效;為true則生效。

      下面代碼演示為配置文件lind.redis.enable為true時才會注冊RedisFactory這個bean

      @Configuration
      @ConditionalOnProperty(prefix="lind.redis",name = "enable", havingValue = "true")
      public class RedisConfig {
          @Bean
          public RedisMap redisMap(){
             return new RedisMapImpl();
          }
      }
      

      其它注釋及總結

      • @ConditionalOnBean // 它是一種依賴,當@ConditionalOnBean(Fishing.class),表示當存在Fishing這個bean,才注冊當前這個bean。
      • @ConditionalOnMissingBean // 它是一種默認值,當沒有自定義的bean時,就使用它產生的bean,@ConditionalOnMissingBean(FishFood.class)表示當沒有FishFood實現的bean,就使用當前方法產生的FishFood的bean.
      • @ConditionalOnClass // 當給定的類名在類路徑上存在,就注冊當前修飾的bean
      • @ConditionalOnMissingClass // 當給定的類名在類路徑上不存在,則實例化當前Bean,也是默認值的體現
      posted @ 2020-08-12 13:08  張占嶺  閱讀(40131)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品福利一区二区久久 | 国产精品播放一区二区三区| 18禁无遮挡啪啪无码网站 | 国产特色一区二区三区视频| 亚洲AV永久纯肉无码精品动漫| 人妻中文字幕精品系列| 亚洲综合伊人久久大杳蕉| 日韩有码中文字幕一区二区| 亚洲一区二区三区丝袜| 久久精品国产亚洲av麻豆小说| 老司机亚洲精品一区二区| 日韩国产中文字幕精品| 国产精品三级中文字幕| 4480yy亚洲午夜私人影院剧情 | 国产真正老熟女无套内射| 亚洲国产精品日韩AV专区| 欧美成人h亚洲综合在线观看| 日韩av在线不卡一区二区| 国产成人午夜在线视频极速观看| 亚洲偷自拍国综合| 99久久精品国产一区色| 精品人妻少妇一区二区三区| 丁香花成人电影| 日韩永久永久永久黄色大片| 又黄又刺激又黄又舒服| 欧美偷窥清纯综合图区| 亚洲无av中文字幕在线| 国产一区二区三区小说| 麻豆久久天天躁夜夜狠狠躁| 国产网友愉拍精品视频手机| 日韩欧美亚洲综合久久| 日韩精品中文字幕国产一| 久久人与动人物a级毛片 | 亚洲色成人网站www永久四虎| 久久综合亚洲鲁鲁九月天| 涩涩爱狼人亚洲一区在线| xx性欧美肥妇精品久久久久久| 久久一亚色院精品全部免费| 双乳奶水饱满少妇呻吟免费看| 欧美成人片一区二区三区| 久久自己只精产国品|