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);
}
}
运行结果图
完~