@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean。
@Conditional的定义:
//此注解可以标注在类和方法上
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Conditional {
Class<? extends Condition>[] value();
}
例子:当存在name为tom的组件时,创建user01组件。可以标注在方法上也可以标注在类上
@ConditionalOnBean(name = "tom") //当容器中没有tom组件 就不注册user01组件,也能将其标注在类上
@Bean
public User user01(){
User user = new User();
user.setName("zhangao");
user.setAge(12);
user.setPet(tomcat());//这个pet就是容器中的pet
return user;
}
@ConditionalOnJava | 系统的java版本是否符合要求
@ConditionalOnBean | 容器中存在指定Bean;
@ConditionalOnMissingBean | 容器中不存在指定Bean;
@ConditionalOnExpression | 满足SpEL表达式指定
@ConditionalOnClass | 系统中有指定的类
@ConditionalOnMissingClass | 系统中没有指定的类
@ConditionalOnSingleCandidate | 容器中只有一个指定的Bean,或者这个Bean是首选Bean
@ConditionalOnProperty | 系统中指定的属性是否有指定的值
@ConditionalOnResource | 类路径下是否存在指定资源文件
@ConditionalOnWebApplication | 当前是web环境
@ConditionalOnNotWebApplication | 当前不是web环境
@ConditionalOnJndi | JNDI存在指定项