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??????????????????

????

  1. SpringBoot ??? web starter???????????? web ???
  2. Java8 Stream ?? findAny?findAll ???????????????????
  3. ?????????? classpath ??? MyBean class?????????????????
    java @Configuration @ConditionalOnClass(MyBean.class) public class MyConfiguration{ // omitted }## ??????


????


????????????????

  • ?? Java ??????
  • ??????
  • ?????????
  • ??????
    ????? ????????ElasticSearch??????
    ?????????????? Java ?????????????????????????????????????????????????????……