一、介紹
SpringBoot條件配置功能,即可以根據不同條件來決定如何配置。如,根據某個類是否存在、某個配置項是否存在或等於某個值等條件,來決定如何配置。
二、SpringBoot自帶的條件註解
SpringBoot自帶的條件註解,位於spring-boot-autoconfigure-x。y。z。jar的org。springframework。boot。autoconfigure。condition包中。下面介紹幾個常用的條件註解。
@ConditionalOnClass:當classpath存在指定的Class時才進行配置。
示例程式碼,當classpath存在User。class時才進行配置。
@Bean(“object1”)@ConditionalOnClass(User。class)public Object createObject1() { return new Object();}
@ConditionalOnMissingClass:當classpath不存在指定的Class時才進行配置。
與@ConditionalOnClass為相反的一對。
@ConditionalOnBean:當classpath存在指定的Bean時才進行配置。
示例程式碼,當classpath存在name=user的Bean時才進行配置。
@Bean(“object2”)@ConditionalOnBean(name = “user”)public Object createObejct2() { return new Object();}
@ConditionalOnMissingBean:當classpath不存在指定的Bean時才進行配置。
與@ConditionalOnBean為相反的一對。
@ConditionalOnProperty:當指定配置項存在或等於某個值時才進行配置。
示例程式碼,當配置項user。id存在時才進行配置。
@Bean(“myuser”)@ConditionalOnProperty(“user。id”)public Object createUser() { return new User();}
三、自定義條件註解
1、Condition介面
編寫一個類,實現Condition介面,並重寫matches方法。
public class EnvironmentCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { return context。getEnvironment()。getProperty(“spring。profiles。active”)。equalsIgnoreCase(“test”); }}
2、@Conditional註解
使用@Conditional註解配合上述的Condition實現類,當Condition實現類的matches方法返回true時才進行配置。
@Bean(“object3”)@Conditional(EnvironmentCondition。class)public Object createTestObject() { return new Object();}