@Conditional
作用是按一定的规则将bean加入到容器中去
@Conditional 可以写在方法上也可以写在类上,
后面可以跟数组
也可以自己写匹配规则重写 matches方法
public class LinuxCondition implements Condition {
/**
* ConditionContext:判断条件能使用的上下文(环境)
* AnnotatedTypeMetadata:注释信息
*/
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
ConditionContext:判断条件能使用的上下文(环境) AnnotatedTypeMetadata:注释信息
//1、能获取到ioc使用的beanfactory
ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
//2、获取类加载器
ClassLoader classLoader = context.getClassLoader();
//3、获取当前环境信息
Environment environment = context.getEnvironment();
//4、获取到bean定义的注册类
BeanDefinitionRegistry registry = context.getRegistry();
利用context获取的东西可以进行bean的条件判断
比如:
//可以判断容器中的bean注册情况,也可以给容器中注册bean
boolean definition = registry.containsBeanDefinition("person");
if(property.contains("linux")){
return true;
}