美文网首页
Spring IoC/DI 10-条件注解注入 Bean(Jav

Spring IoC/DI 10-条件注解注入 Bean(Jav

作者: 周老一员 | 来源:发表于2020-02-21 17:50 被阅读0次

    条件注解注入 Bean(Java配置实现)

    模拟场景

    当程序在 Windows 操作系统下运行时打印 dir 命令,在 Linux 操作系统下运行时打印 ls 命令

    代码实现

    1. 定义接口
      ShowCmd.java
    public interface ShowCmd {
        String show();
    }
    
    1. 定义接口实现
    // ShowCmdInLinux.java
    public class ShowCmdInLinux implements ShowCmd {
        @Override
        public String show() {
            return "ls";
        }
    }
    
    // ShowCmdInWindows.java
    public class ShowCmdInWindows implements ShowCmd {
        @Override
        public String show() {
            return "dir";
        }
    }
    
    1. 定义条件
    // LinuxCondition.java
    public class LinuxCondition implements Condition {
        @Override
        public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
            String property = conditionContext.getEnvironment().getProperty("os.name");
            return property.toLowerCase().contains("linux");
        }
    }
    
    // WindowsCondition.java
    public class WindowsCondition implements Condition {
        @Override
        public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
            String property = conditionContext.getEnvironment().getProperty("os.name");
            return property.toLowerCase().contains("window");
        }
    }
    
    1. 使用条件注解配置Bean
    @Configuration
    public class JavaConfig {
    
        @Bean("cmd")
        @Conditional(WindowsCondition.class)
        ShowCmd showCmdInWindows(){
            return new ShowCmdInWindows();
        }
    
        @Bean("cmd")
        @Conditional(LinuxCondition.class)
        ShowCmd showCmdInLinux(){
            return new ShowCmdInLinux();
        }
    }
    
    1. 应用
    public class TestCmd {
        public static void main(String[] args) {
            AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(JavaConfig.class);
            ShowCmd cmd = (ShowCmd) context.getBean("cmd");
            System.out.println(cmd.show());
        }
    }
    

    相关文章

      网友评论

          本文标题:Spring IoC/DI 10-条件注解注入 Bean(Jav

          本文链接:https://www.haomeiwen.com/subject/zyqhqhtx.html