1 Condition
作用:该功能可以选择性的创建Bean
1.1 验证
在Spring的IOC容器中有一个User的 Bean,现要求导入Jedis坐标后,加载该Bean,没导入,则不加载。
【第一步】创建User对象
@Repository
@Conditional(ClassCondition.class)
public class User {
}
【第二步】创建Condition类:只有存在Jedis才能创建成功。
public class ClassCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
boolean flag = true;
try {
Class.forName("redis.clients.jedis.Jedis");
}catch (ClassNotFoundException e) {
flag = false;
}
return flag;
}
}
【第三步】测试
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(BootTest02Application.class, args);
User user = context.getBean("user", User.class);
System.out.println("user = " + user);
}
}
【第四步】结果
![](https://i-blog.csdnimg.cn/blog_migrate/2e6739ef5ffcc82a024a44c0e16dc195.png)
如果将Jedis引入的信息注释掉以后
![](https://i-blog.csdnimg.cn/blog_migrate/b5fd4f4b03c91a33605470584ff082a3.png)
总结
自定义条件:
@定义条件类:自定义类实现Condition接口,重写matches方法,在 matches方法中进行逻辑判断,返回boolean值。matches方法两个参数:
context:上下文对象,可以获取属性值,获取类加载器,获取BeanFactory等。
metadata:元数据对象,用于获取注解属性
判断条件: 在初始化Bean时,使用@conditional(条件类class)注解
SpringBoot提供的常用条件注解:
conditionalonProperty: 判断配置文件中是否有对应属性和值才初始化Bean;
Conditionalonclass:判断环境中是否有对应字节码文件才初始化Bean
conditionalonMissingBean: 判断环境中没有对应Bean才初始化Bean