[size=large]条件注解@Conditional[/size]
可以基于条件去创建一个Bean,根据满足某一特定条件创建一个特定的Bean
比如 当某一个jar包在一个类路径下的时候 自动配置一个或者多个bean
或者只有某个Bean被创建的时候才创建另外一个Bean ;就是根据特定的条件控制创建
Bean的行为。
可以基于条件去创建一个Bean,根据满足某一特定条件创建一个特定的Bean
比如 当某一个jar包在一个类路径下的时候 自动配置一个或者多个bean
或者只有某个Bean被创建的时候才创建另外一个Bean ;就是根据特定的条件控制创建
Bean的行为。
//实现condition接口 ,重写match方法
public class WindowsConditonal implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return conditionContext.getEnvironment().getProperty("os.name").contains("Windows");
}
}
public class MacConditional implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
return conditionContext.getEnvironment().getProperty("os.name").contains("Mac");
}
}
public interface ListService {
void showComand();
}
public class WindowsListServiceImpl implements ListService{
@Override
public void showComand() {
System.out.println("windows : dir");
}
}
public class MacListServiceImpl implements ListService {
@Override
public void showComand() {
System.out.println("mac : ls");
}
}
@Configuration
public class ConditionalConfig {
@Bean
@Conditional(WindowsConditonal.class)
public ListService winListService(){
return new WindowsListServiceImpl();
}
@Bean
@Conditional(MacConditional.class)
public ListService macListService(){
return new MacListServiceImpl();
}
public static void main(String[] args){
AnnotationConfigApplicationContext atx =
new AnnotationConfigApplicationContext(ConditionalConfig.class);
ListService listService = atx.getBean(ListService.class);
listService.showComand();
}
}