可以基于条件去创建一个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(); } }