spring注解@Conditional 按照一定的条件进行判断,满足条件给容器中注册bean
public class Person {private String name ;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {...
·
public class Person {
private String name ;
private int age ;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public Person() {
super();
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
@Conditional({}) 按照一定的条件进行判断,满足条件给容器中注册bean
* 在类上使用表示,满足条件会执行这个类,如果不满足则类中所有方法都不会加载
* 在方法上使用表示,满足条件会执行这个方法
/**
* @Conditional({}) 按照一定的条件进行判断,满足条件给容器中注册bean
* ** 在类上使用表示,满足条件会执行这个类,如果不满足则类中所有方法都不会加载
* 如果系统是windows,给容器注册("bill")
* 如果系统是linux,给容器注册("linus")
*/
@Conditional({WindowsCondition.class})
@Configuration
public class MainConfig2 {
@Lazy
@Bean
public Person person() {
System.out.println("创建----------->>>>>>>>>");
return new Person("李四",99);
}
/**
* @Conditional({}) 按照一定的条件进行判断,满足条件给容器中注册bean
* ** 在方法上使用表示,满足条件会执行这个方法
* 如果系统是windows,给容器注册("bill")
* 如果系统是linux,给容器注册("linus")
*/
@Conditional({WindowsCondition.class})
@Bean("bill")
public Person person2() {
return new Person("bill gates",66);
}
@Conditional({LinuxCondition.class})
@Bean("linus")
public Person person3() {
return new Person("linus",49);
}
}
public class WindowsCondition implements Condition{
/**
* 判断是否是Windows系统
* ConditionContext:判断条件能使用的上下文(环境)
* AnnotatedTypeMetadata:注释信息
*/
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//1、能获取到ioc使用的beanfactory
ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
//2、获取类加载器
ClassLoader classLoader = context.getClassLoader();
//3、获取当前环境信息
Environment environment = context.getEnvironment();
//4、获取到bean定义的注册类
BeanDefinitionRegistry registry = context.getRegistry();
String property = environment.getProperty("os.name");
if(property.contains("Windows")) {
return true;
}
return false;
}
}
public class LinuxCondition implements Condition{
/**
* 判断是否是linux系统
* ConditionContext:判断条件能使用的上下文(环境)
* AnnotatedTypeMetadata:注释信息
*/
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//1、能获取到ioc使用的beanfactory
ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
//2、获取类加载器
ClassLoader classLoader = context.getClassLoader();
//3、获取当前环境信息
Environment environment = context.getEnvironment();
//4、获取到bean定义的注册类
BeanDefinitionRegistry registry = context.getRegistry();
String property = environment.getProperty("os.name");
if(property.contains("Linux")) {
return true;
}
return false;
}
}
@SuppressWarnings("resource")
@Test
public void test02() {
AnnotationConfigApplicationContext acac = new AnnotationConfigApplicationContext(MainConfig2.class);
System.out.println(Arrays.deepToString(acac.getBeanDefinitionNames()));
String[] definitionNames = acac.getBeanDefinitionNames();
for (String string : definitionNames) {
System.out.println(string);
}
}
更多推荐
已为社区贡献11条内容
所有评论(0)