spring boot: 条件注解@Condition
2023-09-14 08:57:51 时间
@Conditional根据满足某一个特定的条件创建一个特定的Bean(基于条件的Bean的创建,即使用@Conditional注解)。
比方说,当一个jar包在一个类的路径下的时候,自动配置一个或多个Bean,或者只有某个Bean被创建才会去创建另外一个Bean。
通过实现Condition接口,并重写期matches方法来构造判断条件。若在windows系统洗运行程序,则输出列表命令dir,若在linux操作系统下运行程序,则输出命令为:ls.
1.判断条件定义
判断windows的条件
1 package ch2.conditional2; 2 3 //条件注解,并复写此类 4 import org.springframework.context.annotation.Condition; 5 //条件注解容器 6 import org.springframework.context.annotation.ConditionContext; 7 import org.springframework.core.type.AnnotatedTypeMetadata; 8 9 public class LinuxCondition implements Condition { 10 11 @Override 12 public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { 13 // TODO Auto-generated method stub 14 return context.getEnvironment().getProperty("os.name").contains("Linux"); 15 } 16 17 }
判定linux的条件
1 package ch2.conditional2; 2 3 //条件注解接口类,复写metches 4 import org.springframework.context.annotation.Condition; 5 import org.springframework.context.annotation.ConditionContext; 6 import org.springframework.core.type.AnnotatedTypeMetadata; 7 8 public class WindowsCondition implements Condition { 9 10 @Override 11 public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { 12 // TODO Auto-generated method stub 13 return context.getEnvironment().getProperty("os.name").contains("Windows"); 14 } 15 16 }
2不同系统下的Bean类
1接口
1 package ch2.conditional2; 2 3 public interface ListService { 4 5 public String showListCmd(); 6 }
2windows下要创建的Bean类
1 package ch2.conditional2; 2 3 import ch2.conditional2.ListService; 4 5 public class WindowsListService implements ListService { 6 7 @Override 8 public String showListCmd() { 9 // TODO Auto-generated method stub 10 return "dir"; 11 } 12 13 }
3linux下要创建的Bean类
1 package ch2.conditional2; 2 3 import ch2.conditional2.ListService; 4 5 public class LinuxListService implements ListService { 6 7 @Override 8 public String showListCmd() { 9 // TODO Auto-generated method stub 10 return "ls"; 11 } 12 13 }
3配置类
package ch2.conditional2; //配置类声明 import org.springframework.context.annotation.Configuration; //bean声明 import org.springframework.context.annotation.Bean; //条件限制 import org.springframework.context.annotation.Conditional; //声明为配置类 @Configuration public class ConditionConfig { //注解为Bean @Bean //注解条件判断 @Conditional(WindowsCondition.class) public ListService windowsListService() { return new WindowsListService(); } //注解为Bean @Bean //注解条件判断 @Conditional(LinuxCondition.class) public ListService linuxListService() { return new LinuxListService(); } }
4运行
package ch2.conditional2; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConditionConfig.class); ListService listService = context.getBean(ListService.class); System.out.println( context.getEnvironment().getProperty("os.name") + "系统的查看目录的命令是: " + listService.showListCmd() ); context.close(); } }
运行结果:Windows 10系统的查看目录的命令是: dir
相关文章
- 玩转 Spring Boot 原理篇(核心注解知多少)(十)
- Spring中@Autowired和@Resource的区别
- Spring Batch 详解
- spring/jackson:实现对保存JSON字符串的字段自动序列化和反序列化
- Spring Boot拦截器配置拦截登陆「建议收藏」
- 利用 Spring Boot Admin 对 Spring Boot 应用监控以及配置认证
- Spring Boot整合分布式搜索引擎ElasticSearch 实现相关基本操作
- Spring Boot 2.4.3、2.3.9 版本发布,你准备好了吗?
- Spring Boot的日志管理
- Spring Cloud Security配置JWT和OAuth2的集成实现单点登录
- 配置Spring Cloud Bus并集成消息代理
- Spring Boot中使用MongoDB数据库的方法
- Spring Boot2.0之整合多数据源详解编程语言
- spring boot jar包 linux 部署详解编程语言
- Spring Boot 最核心的 3 个注解详解编程语言
- Spring Boot 核心配置文件 bootstrap & application 详解。编程语言
- Spring Boot 集成 Mybatis 实现双数据源详解编程语言
- Spring Boot(二十):使用spring-boot-admin对spring-boot服务进行监控详解编程语言
- spring Boot(十九):使用Spring Boot Actuator监控应用详解编程语言
- Spring框架下整合Redis的实现(spring整合redis)