Spring-条件注解

条件注解就是:根据你当前的环境来注册不同的实例
某一个条件满足的时候bean才会被注册进去


代码部分
1.ShowCmd.java 接口

package org.javaboy.ioc;

/**
 * @author 邓雪松 (づ ̄ 3 ̄)づ)
 * @create 2021-10-21-20-29
 */
public interface ShowCmd {
    String showCmd();
}

2.WindowsShowCmd.java

package org.javaboy.ioc;

/**
 * @author 邓雪松 (づ ̄ 3 ̄)づ)
 * @create 2021-10-21-20-30
 */
public class WindowsShowCmd implements ShowCmd {
    public String showCmd() {
        return "dir";
    }
}

3.LinuxShowCmd.java

package org.javaboy.ioc;

/**
 * @author 邓雪松 (づ ̄ 3 ̄)づ)
 * @create 2021-10-21-20-31
 */
public class LinuxShowCmd implements ShowCmd {
    public String showCmd() {
        return "ls";
    }
}

4.WindowsCondition.java

package org.javaboy.ioc;


import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

/**
 * @author 邓雪松 (づ ̄ 3 ̄)づ)
 * @create 2021-10-21-20-33
 */
public class WindowsCondition implements Condition {

    //这个方法返回true表示条件成立,false代表不成立
    //conditionContext:用来获取环境信息  annotatedTypeMetadata:用来获取Spring的环境信息
    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        //获取操作系统信息
        String osName = conditionContext.getEnvironment().getProperty("os.name");
        return osName.toLowerCase().contains("win");
    }
}

5.LinuxCondition.java

package org.javaboy.ioc;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata;

/**
 * @author 邓雪松 (づ ̄ 3 ̄)づ)
 * @create 2021-10-21-20-58
 */
public class LinuxCondition implements Condition {

    public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        String osName = conditionContext.getEnvironment().getProperty("os.name");
        return osName.toLowerCase().contains("linux");
    }
}

6.JavaConfig.java

package org.javaboy.ioc;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;

/**
 * @author 邓雪松 (づ ̄ 3 ̄)づ)
 * @create 2021-10-21-21-00
 */
@Configuration
public class JavaConfig {
    @Bean("cmd")
    @Conditional(WindowsCondition.class)
    ShowCmd winCmd(){
        return new WindowsShowCmd();
    }
    @Bean("cmd")
    @Conditional(LinuxCondition.class)
    ShowCmd linuxCmd(){
        return new LinuxShowCmd();
    }
}

7.Main.java

package org.javaboy.ioc;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import java.lang.reflect.AnnotatedElement;

/**
 * @author 邓雪松 (づ ̄ 3 ̄)づ)
 * @create 2021-10-21-21-09
 */
public class Main {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(JavaConfig.class);
        ShowCmd cmd = (ShowCmd)ctx.getBean("cmd");
        String s = cmd.showCmd();
        System.out.println("s = "+s);
    }
}

运行结果图

完~

posted @ 2021-10-21 21:38  ╰(‵□′)╯  阅读(290)  评论(0编辑  收藏  举报