SpringBoot條件配置

一、介紹

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();}