mba是什么意思浅谈SpringBoot中的@Conditional注解的使⽤概述
Spring boot 中的 @Conditional 注解是⼀个不太常⽤到的注解,但确实⾮常的有⽤,我们知道 Spring Boot 是根据配置⽂件中的内容,决定是否创建 bean,以及如何创建 bean 到 Spring 容器中,⽽ Spring boot ⾃动化配置的核⼼控制,就是
@Conditional 注解。
@Conditional 注解是 Spring 4.0 之后出的⼀个注解,与其搭配的⼀个接⼝是 Condition,@Conditional 注解会根据具体的条件决定是否创建 bean 到容器中,接下来看看 @Conditional 注解的简单使⽤。
1. @Conditional 和 Condition 接⼝搭配使⽤
这⾥需要实现的功能是,我们根据配置⽂件中的具体内容,来决定是否创建 bean,⾸先我们在 l 中加上⼀个⾃定义配置:新视野大学英语视听说教程>sbr是什么
这⾥我们决定,这个配置中包含了 product 这个字符串的时候,才创建 bean。Product 是我⾃⼰随便创
建的⼀个实体类,你可以⾃⾏创建。
新建⼀个类ProductCondition,内容如下:
public class ProductCondition implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
2014海淀二模
//从配置⽂件中获取属性
String property = Environment().getProperty("create.bean");
if (property != null){
ains("product");
}
critical
el {
return fal;
}
}
}
这个类实现了 Condition 接⼝,这个接⼝只有⼀个⽅法,我们从配置⽂件中获取刚才创建的⾃定义配置,如果配置中包含了product 这个字符串,就会返回 true。
接下来创建⼀个配置类 ProductConfig,内容如下:
@Configuration
public class ProductConfig {
@Conditional(ProductCondition.class)
@Bean(name = "product")
public Product createProd(){
return Product.builder().id(12312).categoryId(12).
机器人翻译productName("Mac Book Pro").productImg("prod.png")
.productPrice(18000).build();
}山竹的英文
}
我们在创建的 bean ⽅法前⾯加上了 @Conditional 注解,判断的标准是刚才的 ProductCondition,如果是 true,则创建bean,否则不创建。我们写⼀个测试类,来测试⼀下 bean 是否被创建了。测试代码如下:
@Slf4j
@SpringBootTest
@RunWith(SpringRunner.class)
public class ProductConfigTest {
@Test
public void createProd() {
try {
Product product = Bean("product", Product.class);
if (product != null){
System.out.println("创建了 bean : " + String());
}
catch (Exception e){
log.info("发⽣异常,{}", e.getMessage());
System.out.println("没有创建 bean");
}
}
}
运⾏测试代码,发现 bean 已经创建了:
如果把 l 中的配置改⼀下,不包含 product 这个字符串,那么返回的是 fal,bean 则不会被创建,你可以试⼀下。
2. @ConditionalOnClass 的使⽤
这个注解的属性可以跟上⼀个类的完整路径或者是类的 Class 对象,如果类存在,则会创建 bean,例如下⾯的例⼦:
@Configuration
public class ProductConfig {
@ConditionalOnClass(name = "ity.Product")
@Bean(name = "product")
public Product createProd(){
return Product.builder().id(12312).categoryId(12).
productName("Mac Book Pro").productImg("prod.png")
.productPrice(18000).build();
}
}
这个路径下⾯的实体类 Product 是存在的,所以会创建 bean,如果是⼀个不存在的类,则不会创建。
3. @ConditionalOnProperty 的使⽤
这个注解可以直接从配置⽂件中获取属性,然后做为是否创建 bean 的依据。例如我们在 l 中添加⼀个⾃定义配置:
儿童英语首选 美国科蒂思维
ProductConfig 类的内容是这样的:
@Configuration
public class ProductConfig {
@ConditionalOnProperty(value = "create.product.bean")
@Bean(name = "product")惊惶
public Product createProd(){
return Product.builder().id(12312).categoryId(12).
productName("Mac Book Pro").productImg("prod.png")
.productPrice(18000).build();
}
这⾥使⽤了 @ConditionalOnProperty 注解,从⽂件中读取配置,因为我们设置的是 true,所以这个 bean 会被创建,如果设置成 fal,则 bean 不会被创建,你可以⾃⼰试⼀下。根据这个特性,我们可以给⼀些特定的配置加上⼀个开关,⾮常⽅便控制。
这⾥我只是列举了⼏个常⽤的注解,你可以查看官⽅⽂档,⾥⾯有更详细的说明:
参考⽂档:
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
wor