zoukankan      html  css  js  c++  java
  • Springboot 条件注解

    • @Conditional 根据满足某一个特定条件创建一个特定的 Bean。就是根据特定条件来控制 Bean 的创建行为,这样我们可以利用这个特性进行一些自动的配置
    • Springboot 中大量用到了条件注解
    • 示例,以不同的操作系统作为条件,我们将通过实现 Condition 接口,并重写其 matches() 方法来构造判断条件。若在 Windows 系统下运行程序,则输出列表命令为 dir ,若在 Linux 系统下运行程序,则输出列表命令为 ls
      • 判断 Window 条件

        public class WindowsCondition implements Condition {
            @Override
            public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
                return context.getEnvironment().getProperty("os.name").contains("Windows");
            }
        }
        
      • 判断 Linux 条件

        public class LinuxCondition implements Condition {
            @Override
            public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
                return context.getEnvironment().getProperty("os.name").contains("Linux ");
            }
        }
        
      • 不同系统下的 Bean 类

        • 接口

          public interface ListService {
              String showListCmd();
          }
          
        • Window 下所要创建的 Bean 类

          public class WindowsListService implements ListService{
              @Override
              public String showListCmd() {
                  return "dir";
              }
          }
          
        • Linux 下所要创建的 Bean 类

          public class LinuxListService implements ListService {
              @Override
              public String showListCmd() {
                  return "ls";
              }
          }
          
      • 配置类

        @Configuration
        public class ConditionConfig {
        
            @Bean
            @Conditional(WindowsCondition.class)
            public ListService windowsListService(){
                return new WindowsListService();
            }
        
            @Bean
            @Conditional(LinuxCondition.class)
            public ListService linuxListService(){
                return new LinuxListService();
            }
        
        }
        
      • 测试类

        @RunWith(SpringRunner.class)
        @SpringBootTest(classes = Ch522Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
        public class TaskTest {
        
            @Autowired
            private ListService listService;
        
            @Test
            public void conditionalTest() {
                System.out.println(listService.showListCmd());
            }
        }
        
      • 测试结果

        dir
        
  • 相关阅读:
    verilog parameter 位宽问题
    quartus prime 16.0 报警告 inferring latch
    Quartus prime16.0 组合逻辑always块中敏感向量表不全
    centos6.8下安装matlab2009(图片转帖)
    centos6.8下普通用户下quartus编程识别不到用户开发板
    centos6.8下安装破解quartus prime16.0以及modelsim ae安装
    PHP TP 生成二维码
    模态框MODAL的一些事件捕捉
    iOS微信第三方登录实现
    PHP ini 配置无效的坑给自己记录
  • 原文地址:https://www.cnblogs.com/liyiran/p/11461712.html
Copyright © 2011-2022 走看看