springBoot自動化配置

SpringBoot 1.5.12.RELEASE 版本
 
已爲例JdbcTemplate 爲例。
spring-boot-autoconfigure-1.5.12.RELEASE.jar!\org\springframework\boot\autoconfigure\jdbc\JdbcTemplateAutoConfiguration.class
 
地方
 
1.1.1 @Configuration
    表明是一個配置類,和以前編寫的配置文件一樣。註解引用@Component給容器中添加組件
 
1.1.2 @ConditionalOnClass({DataSource.class, JdbcTemplate.class})
    DataSource、JdbcTemplate在應用的classpath上時纔開啓自動配置
部分condition條件
@ConditionalOnBean:
當容器裏有指定Bean的條件下
@ConditionalOnClass:
當類路徑下有指定類的條件下
@ConditionalOnExpression:
基於SpEL表達式作爲判斷條件
@ConditionalOnJava:
基於JV版本作爲判斷條件
@ConditionalOnJndi:
在JNDI存在的條件下差在指定的位置
@ConditionalOnMissingBean:
當容器裏沒有指定Bean的情況下
@ConditionalOnMissingClass:
當類路徑下沒有指定類的條件下
@ConditionalOnNotWebApplication:
當前項目不是Web項目的條件下
@ConditionalOnProperty:
指定的屬性是否有指定的值
@ConditionalOnResource:
類路徑是否有指定的值
@ConditionalOnSingleCandidate:
當指定Bean在容器中只有一個,或者雖然有多個但是指定首選Bean
@ConditionalOnWebApplication:
當前項目是Web項目的條件下
 
 
1.1.3 @ConditionalOnSingleCandidate(DataSource.class)
    僅在單數據源bean存在時才生效
 
 
1.1.4 @AutoConfigureAfter({DataSourceAutoConfiguration.class})
    在DataSourceAutoConfiguration之後再加載
 
 
1.1.4.1 DataSourceAutoConfiguration的自動注入
 
 
1.1.4.2 @EnableConfigurationProperties({DataSourceProperties.class})
 @EnableConfigurationProperties 中引入類EnableConfigurationPropertiesImportSelector
        @Import({EnableConfigurationPropertiesImportSelector.class})
 類DataSourceProperties 爲最終獲取到配置文件配置信息的類。
    
 
其他配置信息,可以參考  xxxxProperties 類。 路徑spring-boot-autoconfigure-1.5.12.RELEASE.jar!\org\springframework\boot\autoconfigure\jdbc\DataSourceProperties.class
 
即大多數自動化配置信息都在 org\springframework\boot\autoconfigure 中。
 
 


 
以HttpEncodingAutoConfiguration 爲例
spring-boot-autoconfigure-1.5.12.RELEASE.jar!\org\springframework\boot\autoconfigure\web\HttpEncodingAutoConfiguration.class
 
 
 
 
 
2.1 @EnableConfigurationProperties({HttpEncodingProperties.class})
           使 HttpEncodingProperties中的@ConfigurationProperties生效,注入容器。
           配置類中,配置路徑spring.http.encoding
    
 
2.2 @ConditionalOnWebApplication 當前是web項目
            
 
 
2.3 @ConditionalOnClass({CharacterEncodingFilter.class}) 
    類CharacterEncodingFilter 繼承於 OncePerRequestFilter
            運行OncePerRequestFilter 的 doFilter() 時調用子類的 doFilterInternal()方法
        給請求和響應設置編碼
    
判斷配置文件  //即使我們配置文件中不配置pring.http.encoding.enabled=true,也是默認生效的;
@ConditionalOnProperty(
    prefix = "spring.http.encoding",
    value = {"enabled"},
    matchIfMissing = true
)
註解@ConditionalOnProperty 配合看一篇花裏胡哨的博文https://www.cnblogs.com/yaphetsfang/p/11817999.html
@Conditional(OnPropertyCondition.class) 
public @interface ConditionalOnProperty { 
/**
* String數組 該屬性與下面的 name 屬性不可同時使用,
* 當value所對應配置文件中的值爲false時,注入不生效,不爲fasle注入生效
* value有多個值時,只要有一個值對應爲false,則注入不成功 
*/
String[] value() default {}; 
/**
* 配置文件中key的前綴,可與value 或 name 組合使用 */ 
String prefix() default ""; 
 
/** * 與 value 作用一致 */ 
String[] name() default {};
 
/** * 與value 或 name 組合使用,只有當value 或 name 對應的值與havingValue的值相同時,注入生效 */ 
String havingValue() default ""; 
 
/** * 配置中缺少對應的屬性時,是否可以被注入;爲true時缺少對應配置可注入 */ 
boolean matchIfMissing() default false;} */ String havingValue() default "";
 
/** *該屬性爲true時,配置文件中缺少對應的value或name的對應的屬性值,也會注入成功 */ 
boolean matchIfMissing() default false;
 
 
發佈了29 篇原創文章 · 獲贊 9 · 訪問量 9291
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章