跟@Profile类似的注解,根据不同的条件得到不同的Bean;需要实现Condition接口
eg:判断当前是什么操作环境
public class WinCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("os.name").contains("Windows");
}
}
public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("os.name").contains("Linux");
}
}
service接口类以及实现类
public class WinService implements ListService {
@Override
public String showCmdList() {
return "这是windows环境";
}
}
public class LinuxService implements ListService {
@Override
public String showCmdList() {
return "这是linux环境";
}
}
执行
@Bean
@Conditional(WinCondition.class)
public ListService win(){
return new WinService();
}
@Bean
@Conditional(LinuxCondition.class)
public ListService linux(){
return new LinuxService();
}
ListService ls = context.getBean(ListService.class);
System.err.println(ls.showCmdList());