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

转载于:https://www.cnblogs.com/liyiran/p/11461712.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值