Spring(十三):Spring条件注解@Conditional

star2017 1年前 ⋅ 343 阅读

Spring提供了一个通用的基于条件来创建Bean的注解@Conditional注解。

通过实现Condition接口,并重写其matches方法来构造判断条件。

示例

条件:根据操作系统返回对应的内容。

  1. 定义判断条件

     //Windows系统的判断条件
     import org.springframework.context.annotation.Condition;
     import org.springframework.context.annotation.ConditionContext;
     import org.springframework.core.type.AnnotatedTypeMetadata;
    
     public class WindowsCondition implements Condition {
    
         @Override
         public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
             return context.getEnvironment().getProperty("os.name").contains("Windows");
         }
     }
    
     //Linux系统的判断条件
     import org.springframework.context.annotation.Condition;
     import org.springframework.context.annotation.ConditionContext;
     import org.springframework.core.type.AnnotatedTypeMetadata;
    
     public class LinuxCondition implements Condition {
    
         @Override
         public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
             return context.getEnvironment().getProperty("os.name").contains("Linux");
         }
     }
    
  2. 不同系统下的Bean类

     //接口
     public interface ListService {
    
         public String showListCmd();
     }
    
     //Windows下的实现类
     public class WindowsListServiceImpl implements ListService {
    
         @Override
         public String showListCmd() {
             return "dir";
         }
     }
    
     //Linux下的实现类
     public class LinuxListServiceImpl implements ListService {
    
         @Override
         public String showListCmd() {
             return "ls";
         }
     }
    
  3. 配置类
    @Conditional()注解调用条件判断的类并根据返回的结果来创建Bean

     import org.springframework.context.annotation.Bean;
     import org.springframework.context.annotation.Conditional;
     import org.springframework.context.annotation.Configuration;
    
     @Configuration
     public class ConditionConfig {
    
         @Bean
         @Conditional(WindowsCondition.class)
         public ListService windowsListService() {
             return new WindowsListServiceImpl();
         }
    
         @Bean
         @Conditional(LinuxCondition.class)
         public ListService linuxListService() {
             return new LinuxListServiceImpl();
         }
     }
    
  4. 运行类

     import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
     public class ConditionMain {
    
         public static void main(String[] args) {
             AnnotationConfigApplicationContext context = 
                     new AnnotationConfigApplicationContext(ConditionConfig.class);
    
             ListService listService = context.getBean(ListService.class);
             System.out.println(context.getEnvironment().getProperty("os.name")
                     + "系统下的列表命令:"
                     + listService.showListCmd());
    
             //context.close();
         }
     }
    
更多内容请访问:IT源点

相关文章推荐

全部评论: 0

    我有话说: