假設 java 版本是 1.7 就將 Animal 註冊;1.8 就將 Bird 註冊
@Conditional 可以寫在 Type 或是方法上
※寫在 Type
※條件
public class Java7Condition implements Condition {
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String version = context.getEnvironment().getProperty("java.specification.version");
if ("1.7".equals(version)) {
return true;
}
return false;
}
}
public class Java8Condition implements Condition {
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String version = context.getEnvironment().getProperty("java.specification.version");
if ("1.8".equals(version)) {
return true;
}
return false;
}
}
※
※使用
@Conditional(Java7Condition.class)
@Component
public class Animal {}
@Conditional(Java8Condition.class)
@Component
public class Bird {}
※
※測試
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
for (String s : app.getBeanDefinitionNames()) {
System.out.println(s);
}
app.close();
※可將 vm 參數改成需要的,按右鍵如下:
※寫在方法上
※
@Configuration
public class JavaVersionCondition {
@Conditional(Java7Condition.class)
@Bean
public Animal a1() {
Animal a = new Animal();
a.setId(1);
a.setName("tiger");
return a;
}
@Conditional(Java7Condition.class)
@Bean
public Animal a2() {
Animal a = new Animal();
a.setId(2);
a.setName("lion");
return a;
}
@Conditional(Java8Condition.class)
@Bean
public Bird b1() {
Bird b = new Bird();
b.setId(3);
b.setName("crow");
return b;
}
@Conditional(Java8Condition.class)
@Bean
public Bird b2() {
Bird b = new Bird();
b.setId(4);
b.setName("sparrow");
return b;
}
}
※是 java7 就有 a1、a2;是 java8 就有 b1、b2
※測試
// System.getProperties().list(System.out);
// System.out.println(app.getEnvironment().getProperty("java.specification.version"));
AnnotationConfigApplicationContext app = new AnnotationConfigApplicationContext(Animal.class);
for (String s : app.getBeanDefinitionNames()) {
System.out.println(s);
}
Map<String, Bird> type = app.getBeansOfType(Bird.class); // 取得 class 是 Bird 的 id 及內容
System.out.println(type);
for (String s : app.getBeanNamesForType(Bird.class)) { // 取得 class 是 Bird 的 id
System.out.println(s);
}
app.close();
※


沒有留言:
張貼留言