Springboot 條件註解

  • @Conditional 根據知足某一個特定條件建立一個特定的 Bean。就是根據特定條件來控制 Bean 的建立行爲,這樣咱們能夠利用這個特性進行一些自動的配置
  • Springboot 中大量用到了條件註解
  • 示例,以不一樣的操做系統做爲條件,咱們將經過實現 Condition 接口,並重寫其 matches() 方法來構造判斷條件。若在 Windows 系統下運行程序,則輸出列表命令爲 dir ,若在 Linux 系統下運行程序,則輸出列表命令爲 ls
    • 判斷 Window 條件java

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

      public class LinuxCondition implements Condition {
          @Override
          public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
              return context.getEnvironment().getProperty("os.name").contains("Linux ");
          }
      }
    • 不一樣系統下的 Bean 類
      • 接口web

        public interface ListService {
            String showListCmd();
        }
      • Window 下所要建立的 Bean 類windows

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

        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());
          }
      }
    • 測試結果code

      dir
相關文章
相關標籤/搜索