02、Spring常用注解一@Conditional
@Conditional来指定一定条件下注册组件对像
所有的条件必须实现Condition接口,重写matches方法,来决定组件是否注册。
1. 新建条件类
WindowsCondition
//判断是否是Windows系统
public class WindowsCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//获取当前运行环境信息
Environment environment = context.getEnvironment();
//获取当前环境名称
String osName = environment.getProperty("os.name");
if(osName.contains("Windows")) {
return true;
}
return false;
}
}
LinuxCondition
//判断是否是Linux系统
public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
//获取当前运行环境信息
Environment environment = context.getEnvironment();
//获取当前环境名称
String osName = environment.getProperty("os.name");
if(osName.contains("Linux")) {
return true;
}
return false;
}
}
2. 新建配置类
@Configuration
public class Cap5MainConfig {
@Bean
public Person person() {
System.out.println("将person加入ioc容器");
return new Person("person", 15);
}
@Conditional(WindowsCondition.class)
@Bean
public Person zhgangsan() {
System.out.println("将zhgangsan加入ioc容器");
return new Person("zhgangsan", 15);
}
@Conditional(LinuxCondition.class)
@Bean
public Person lisi() {
System.out.println("将lisi加入ioc容器");
return new Person("lisi", 15);
}
}
3.新建测试类
public class Cap5Test {
@Test
public void test() {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Cap5MainConfig.class);
System.out.println("IOC容器加载完成");
}
}
因为当前开发环境为windows10,所以将person,zhgangsan都加入IOC容器中,
执行测试类结果如下:
设置vm的变量来模拟Linux环境,Run Configurations->VM options
添加 Dos.name=Linux
再次执行测试类,结果如下
说明通过@Conditional条件注册bean生效
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)