@Conditiional注解

阅读更多
条件注解@Conditional
     可以基于条件去创建一个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();

    }
}




  • @Conditiional注解_第1张图片
  • 大小: 147.7 KB
  • 查看图片附件

你可能感兴趣的:(@Conditiional注解)