一、condition系列注解
1.1 常用condition列举:
@ConditionalOnClass //当classpath下发现该类的情况下进行自动配置
@ConditionalOnMissingBean //当Spring Context中不存在该Bean时。
@ConditionalOnProperty(prefix = "example.service",value = "enabled",havingValue = "true") //当配置文件中example.service.enabled=true时。
1.2 自定义condition演示:
@Conditional 注解需要传入一个condition类,此类实现Condition类,核心方法就是matches,如果返回true,那么被注解的bean就创建,反之。
public class MyBeanCondition implements Condition{
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata metadata) {
// 注解标记的类
System.out.println(metadata.getClass().getName());
// 强转
StandardMethodMetadata standardMethodMetadata = (StandardMethodMetadata)metadata;
// 方法名称
System.out.println(standardMethodMetadata.getMethodName());
conditionContext.getRegistry(); // 获取注册的bean
conditionContext.getBeanFactory(); //获取提供bean definition的解析,注册功能,再对单例来个预加载(解决循环依赖问题).
conditionContext.getEnvironment(); //获取环境配置
conditionContext.getResourceLoader(); //ResourceLoader所加载的资源
conditionContext.getClassLoader(); //获取类加载器
//annotatedTypeMetadata 被加上注解的源数据信息。比如annotatedTypeMetadata.
return conditionContext.getRegistry().containsBeanDefinition("myBean") && !conditionContext.getRegistry().containsBeanDefinition("cat");
}
}
MybeanCondition就是判断容器中存在mybean&#x