Spring Boot @Condition 註解,組合條件你知道嗎
- 2019 年 10 月 3 日
- 筆記
????? ?????? @ConfigurationProperties ?????????????? ??????? @ConfigurationProperties
???????????????????????? Spring Bean
????
??????? Spring ????????????????????????? bean ?????????? ?Spring 4.0 ????????? @Conditional
?????????
???? @Conditional
???????? extends Condition ????????????????? @Conditional
???????? Condition ??????????:
????? matches ?????? boolean ???????????? validation annotation ??????????????????????????????????? org.springframework.context.annotation
package ?
???? Spring Boot ????????????Spring Boot ? @Conditional
?????????????????????? (?? Condition ??)??????????? @ConditionalOnXxxx
??????????????????? Application Context ??
????
Spring Boot ? @Conditional
?????????????????? org.springframework.boot.autoconfigure.condition
package ?
????? 13 ????????????????????:
????????????????:
-
?????? TYPE ???????Spring ???????? (@Configuration, @Component, @Service, @Repository, or @Controller) ??????????
@ConditionalOnXxxx
??????? -
?????? METHOD ????? @Bean ??????????????
-
????
@Conditional
??????OnBeanCondition ???? Condition ????? Condition ?????????????????????????????????????:
??????????????????????????????????????????????????????????????:
@ConditionalOnProperty
???????????
???????: application.properties ? application.yml ??? mybean.enable ? true ???? MyCondition ?? Bean??????????????? matchIfMissing = true????? false?
@ConditionalOnBean ? ConditionalOnMissingBean
????????? Bean ?????????????????????? @ConditionalOnBean
??:
?????????????? Bean ?????????????????????? @ConditionalOnMissingBean
??
@ConditionalOnClass ? @ConditionalOnMissingClass
??????????????????????????? classpath ???????????
@ConditionalOnExpression
??????????????????????????????????:
????????? true ?????? MyModule?????????????? ?????? @ConfigurationProperties ?????????????? ???? 3??? :true
??: ??????????????????????true, ?????@Vaue
???????? SpEL ????????.
???????????????????????????? ???????????:
@ConditionalOnSingleCandidate
????? @ConditionalOnBean ???????????????? (??? ????
) ?????????????
????????? BeanFactory ???????????????????
BeanFactory ???? bean ???????? primary ??????(???????
@Primary
??)????????????????????????? bean ?????????????????????????? bean ??????????????? auto-configuration ????????????? bean ????? auto-configuration ??????????????????
@ConditionalOnResource
???????? bean ??????????? classpath ???????????????
???? logback.xml ??????????????????? Dozer ???????????
?????????????????????????????????????????
@ConditionalOnJndi
????????? JNDI ?????? bean
@ConditionalOnJava
????????? Java ???? Bean
@ConditionalOnWebApplication ? @ConditionalOnNotWebApplication
????? web ????????? bean
??????? web ????? bean
@ConditionalOnCloudPlatform
????????????????????????????????? bean?CloudPlatform ? org.springframework.boot.cloud
??? enum ???????????????:
???Spring Boot ??????? 13 ???????????????????????????????:
????
???? AND
?????????????????????? and
?????????????@ConditionalOnXxxx
???? (???????) ???????? AllNestedConditions
?????????
??????? and ???????????????????? bean
???? OR
???????????? or
???????????? ???????? AnyNestedCondition
???????????????????????? AnyNestedCondition
?????????
???? NONE
? and ? or ???? non(?)????????? NoneNestedConditions
???????????????
## ?????
??????????????????????????????????????????????????????? 13 ???????:
?????@Conditional
?????????? condition ???????????????????
??????? RabbitMq ? RabbitAutoConfiguration
???????????????? (?????????)????????????????????:
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/amqp/RabbitAutoConfiguration.java
??
???????????????? bean?????????????????????????? IDE??????????????????
????
- SpringBoot ??? web starter???????????? web ???
- Java8 Stream ?? findAny?findAll ???????????????????
- ?????????? classpath ??? MyBean class?????????????????
java @Configuration @ConditionalOnClass(MyBean.class) public class MyConfiguration{ // omitted }
## ??????
????
- ????????????????
- ???????????????????
- ??????BeanFactory?ApplicationContext????
- ??????RESTful API
- ???????????
????????????????
- ?? Java ??????
- ??????
- ?????????
- ??????
????? ????????ElasticSearch??????
?????????????? Java ?????????????????????????????????????????????????????……