一、准备工作
1、导入spring-context依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.22.RELEASE</version>
</dependency>
2、创建实体类OS
public class OS {
private String name;
public OS() {
}
public OS(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
二、注解用法
1、查看@Conditional注解源码
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Conditional {
// @Conditional源码非常简单,需要传入一个Condition的子类
Class<? extends Condition>[] value();
}
2、创建WindowsCondition、LinuxCondition
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class WindowsCondition implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
// 获取系统环境配置
Environment environment = conditionContext.getEnvironment();
// 获取操作系统名称
String systemName = environment.getProperty("os.name");
// 判断当前环境是否为Windos系统
return systemName.contains("Windows");
}
}
import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.env.Environment;
import org.springframework.core.type.AnnotatedTypeMetadata;
public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
// 获取系统环境配置
Environment environment = conditionContext.getEnvironment();
// 获取操作系统名称
String systemName = environment.getProperty("os.name");
// 判断当前环境是否为Linux系统
return systemName.contains("Linux");
}
}
3、创建BeanConfig配置类
import com.spring.condition.LinuxCondition;
import com.spring.condition.WindowsCondition;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration;
@Configuration
public class BeansConfig {
@Conditional(WindowsCondition.class)
@Bean
public OS windows(){
return new OS("Windows");
}
@Conditional(LinuxCondition.class)
@Bean
public OS linux(){
return new OS("Linux");
}
}
4、开始测试
public static void main(String[] args) {
// 一般情况下我们正常使用的都是windows操作系统,所以可以通过System.setProperty("os.name","Linux")来模拟Linux
// System.setProperty("os.name","Linux");
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(BeansConfig.class);
boolean hasWindows = context.containsBean("windows");
boolean hasLinux = context.containsBean("linux");
System.out.println("hasWindows:" + hasWindows);
System.out.println("hasLinux:" + hasLinux);
}
三、总结分析
本章主要学习了,@Conditional按条件注入Bean。《参考资料》