zoukankan      html  css  js  c++  java
  • spring boot: 条件注解@Condition

    @Conditional根据满足某一个特定的条件创建一个特定的Bean(基于条件的Bean的创建,即使用@Conditional注解)。

    比方说,当一个jar包在一个类的路径下的时候,自动配置一个或多个Bean,或者只有某个Bean被创建才会去创建另外一个Bean。

    通过实现Condition接口,并重写期matches方法来构造判断条件。若在windows系统洗运行程序,则输出列表命令dir,若在linux操作系统下运行程序,则输出命令为:ls.

    1.判断条件定义

    判断windows的条件

     1 package ch2.conditional2;
     2 
     3 //条件注解,并复写此类
     4 import org.springframework.context.annotation.Condition;
     5 //条件注解容器
     6 import org.springframework.context.annotation.ConditionContext;
     7 import org.springframework.core.type.AnnotatedTypeMetadata;
     8 
     9 public class LinuxCondition implements Condition {
    10 
    11     @Override
    12     public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    13         // TODO Auto-generated method stub
    14         return context.getEnvironment().getProperty("os.name").contains("Linux");
    15     }
    16 
    17 }

    判定linux的条件

     1 package ch2.conditional2;
     2 
     3 //条件注解接口类,复写metches
     4 import org.springframework.context.annotation.Condition;
     5 import org.springframework.context.annotation.ConditionContext;
     6 import org.springframework.core.type.AnnotatedTypeMetadata;
     7 
     8 public class WindowsCondition implements Condition {
     9 
    10     @Override
    11     public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
    12         // TODO Auto-generated method stub
    13         return context.getEnvironment().getProperty("os.name").contains("Windows");
    14     }
    15 
    16 }

    2不同系统下的Bean类

    1接口

    1 package ch2.conditional2;
    2 
    3 public interface ListService {
    4 
    5     public String showListCmd();
    6 }

    2windows下要创建的Bean类

     1 package ch2.conditional2;
     2 
     3 import ch2.conditional2.ListService;
     4 
     5 public class WindowsListService implements ListService {
     6 
     7     @Override
     8     public String showListCmd() {
     9         // TODO Auto-generated method stub
    10         return "dir";
    11     }
    12 
    13 }

    3linux下要创建的Bean类

     1 package ch2.conditional2;
     2 
     3 import ch2.conditional2.ListService;
     4 
     5 public class LinuxListService implements ListService {
     6 
     7     @Override
     8     public String showListCmd() {
     9         // TODO Auto-generated method stub
    10         return "ls";
    11     }
    12 
    13 }

    3配置类

    package ch2.conditional2;
    
    //配置类声明
    import org.springframework.context.annotation.Configuration;
    //bean声明
    import org.springframework.context.annotation.Bean;
    //条件限制
    import org.springframework.context.annotation.Conditional;
    
    //声明为配置类
    @Configuration
    public class ConditionConfig {
    
        //注解为Bean
        @Bean
        //注解条件判断
        @Conditional(WindowsCondition.class)
        public ListService windowsListService()
        {
            return new WindowsListService();
        }
        
        //注解为Bean
        @Bean
        //注解条件判断
        @Conditional(LinuxCondition.class)
        public ListService linuxListService()
        {
            return new LinuxListService();
        }
    }

    4运行

    package ch2.conditional2;
    
    import org.springframework.context.annotation.AnnotationConfigApplicationContext;
    
    public class Main {
    
        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();
        }
    }

    运行结果:Windows 10系统的查看目录的命令是: dir

  • 相关阅读:
    免费的论文查重网站
    文件上传到tomcat服务器 commons-fileupload的详细介绍与使用
    消防喷头的原理
    [辟谣]下蹲猛起来眼前发黑是心脏衰竭的表现?别扯了!
    noip2010普及组 接水问题分析
    洛谷P1106 删数问题
    老飞侠随机抽取器 v3.0 新春钜惠版
    一个基于VB的简单IRC机器人服务器
    (转)经常有人发错 SQL 的发音,如何华丽丽的引导纠正他们又不失优雅?
    TONGHUA
  • 原文地址:https://www.cnblogs.com/achengmu/p/8269985.html
Copyright © 2011-2022 走看看