@ConditionalOnBean:
|
當容器裏有指定Bean的條件下
|
@ConditionalOnClass:
|
當類路徑下有指定類的條件下
|
@ConditionalOnExpression:
|
基於SpEL表達式作爲判斷條件
|
@ConditionalOnJava:
|
基於JV版本作爲判斷條件
|
@ConditionalOnJndi:
|
在JNDI存在的條件下差在指定的位置
|
@ConditionalOnMissingBean:
|
當容器裏沒有指定Bean的情況下
|
@ConditionalOnMissingClass:
|
當類路徑下沒有指定類的條件下
|
@ConditionalOnNotWebApplication:
|
當前項目不是Web項目的條件下
|
@ConditionalOnProperty:
|
指定的屬性是否有指定的值
|
@ConditionalOnResource:
|
類路徑是否有指定的值
|
@ConditionalOnSingleCandidate:
|
當指定Bean在容器中只有一個,或者雖然有多個但是指定首選Bean
|
@ConditionalOnWebApplication:
|
當前項目是Web項目的條件下
|
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條件
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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.