springBoot條件配置

本篇介紹下,如何經過springboot的條件配置,控制Bean的建立html

  • 介紹下開發環境
    • JDK版本1.8
    • springboot版本是1.5.2
    • 開發工具爲 intellij idea(2018.2)
    • 開發環境爲 15款MacBook Pro

前言

不少時候,咱們在公司用springboot做爲基礎框架開發項目的時候,會碰見建立BeanB的時候,須要BeanA已經建立好了,也就是根據條件來判斷,是否建立該BeanB,這邊寫個教程,給各位做參考java


如何弄條件配置呢?

此次,咱們只在同一個項目內的 @Configuration 配合 @Bean 作演示,實際狀況下,比較推薦用類註解 @Component 配合條件註解使用,下面演示的,只是比較經常使用的一些條件配置註解,並不包含全部git

  1. 咱們先建立一個普通的spring-boot項目,記得添加web依賴,不然,項目不會後臺運行web

    <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
  2. 建立一個測試條件配置的類(不跟啓動類一個目錄下,最好單首創建一個目錄)spring

    @Configuration
     public class SpecialBeanFactory {
    
    
    	    @Bean
    	    public A buildA(){
    	        return new A();
    	    }
    
    	    @Bean
    	    // 若是存在Bean A,則建立Bean B
    	    @ConditionalOnBean(A.class)
    	    public B buildB(){
    	        return new B();
    	    }
    
    	    @Bean
    	    // 目錄下猶如包含E.class 則建立Bean C
    	    @ConditionalOnClass(E.class)
    	    public C buildC(){
    	        return new C();
    	    }
    
    	    @Bean
    	    @ConditionalOnMissingClass(value = "W")
    	    public D buildD(){
    	        return new D();
    	    }
    
    
    	    @Bean
    	    // 若是不存在Bean E 那麼建立Bean F
    	    @ConditionalOnMissingBean(E.class)
    	    public F buildF(){
    	        return new F();
    	    }
    
    	    @Bean
    	    // 屬性文件若是存在 key=hexiaowu value= nan 的則建立BeanH
    	    @ConditionalOnProperty(value = "hexiaowu",havingValue = "nan")
    	    public H buildH(){
    	        return new H();
    	    }
     }
  3. 而後咱們在啓動下啓動類,會看到以下日誌springboot

    2018-10-18 20:08:49.732  INFO 24960 --- [           main] com.example.conditionBase.vo.A           : 建立 A
    2018-10-18 20:08:49.733  INFO 24960 --- [           main] com.example.conditionBase.vo.B           : 建立 B
    2018-10-18 20:08:49.734  INFO 24960 --- [           main] com.example.conditionBase.vo.C           : 建立 C
    2018-10-18 20:08:49.735  INFO 24960 --- [           main] com.example.conditionBase.vo.D           : 建立 D
    2018-10-18 20:08:49.736  INFO 24960 --- [           main] com.example.conditionBase.vo.F           : 建立 F
  4. 打印上面日誌,說明條件配置生效了框架


關於條件配置

使用條件配置,咱們須要配置的東西不多,也就新增條件配置註解ide

條件配置官方文檔地址以下: 條件配置官方文檔spring-boot

註解 使用
@ConditionalOnBean 若是註解內的Bean存在,那麼則建立註解類或者方法返回的Bean
@ConditionalOnClass 若是註解內classpath下存在某個class,那麼建立註解類或者方法返回的Bean
@ConditionalOnMissingClass 若是註解內classpath沒有該class名稱,那麼建立註解類或者方法返回的Bean
@ConditionalOnMissingBean 若是註解內的Bean不存在,那麼建立註解類或者方法返回的Bean
@ConditionalOnProperty 若是屬性文件內,包含註解內對應的屬性名稱跟值,那麼建立註解類或者方法返回的Bean

注意

注意: 在配合 @Bean 註解跟條件註解使用建立Bean的時候,須要注意的是, @Bean 註解是跟@Configuration 註解配合外部配置的,也就是跟 @ComponentScan 掃描有不一樣的區別,掃描會有依賴(生成一個有向圖的依賴,我的猜想,沒具體研究過源碼),可是 @Bean 卻沒有, 例如: 在配置註解 @Configuration 類下 建立B Bean,須要A Bean不存在,若是建立B Bean的方法在建立A Bean前面,那麼B跟A都會建立,若是建立A在建立B前面,那邊B則不會建立,須要注意,若是是經過掃描的,則不用擔憂這點,工具


結束語

本次介紹的,只是比較經常使用的,並無介紹全,例如: 自定義條件配置,以及資源條件配置等,並未介紹,下篇介紹

項目源碼,我已經上傳到gitee 須要的朋友,能夠本身點擊查看 springboot條件配置

到這,文章就結束了!

以上,均爲本人測試而得出的結果,可能會有出入,或者錯誤,歡迎指正

歡迎轉載,請註明出處跟做者,謝謝!

相關文章
相關標籤/搜索