目录
前沿
当我们在后面学习springboot的源码的时候,经常会看到按照条件进行组件的注册。
Spring的@Conditional
这里我们说一下Spring的@Conditional注解。在Spring4之后就有了这个条件注册的注解。
通过看@Conditional注解的源码,我们可以看到,如果里面有个Class数组的属性。而且泛型是
<? extends Condition>。因此需要我们自己写一个类来实现condition
实现类如下
public class MyConditional implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
BeanFactory beanFactory = context.getBeanFactory();
boolean userFlag = beanFactory.containsBean("user");
return userFlag;
}
}
我们在配置类中创建一个Date对象,上面加上@Conditional注解
public class MainConfig2 {
@Lazy
@Scope("singleton")
@Bean("user")
public User getUser(){
return new User(1002,"Tom");
}
@Conditional(value = {MyConditional.class})
@Bean
public Date getDate(){
return new Date();
}
}
执行测试方法
@Test
public void test4(){
ApplicationContext ac = new AnnotationConfigApplicationContext(MainConfig2.class);
Date date = ac.getBean(Date.class);
System.out.println(date);
}
如果,我们将user对象的名修改成其他名字在执行测试方法
此时执行测试方法,则会报错说没有定义这样的bean定义