Springboot 条件注解
@Conditional根据满足某一个特定条件创建一个特定的 Bean。就是根据特定条件来控制 Bean 的创建行为,这样我们可以利用这个特性进行一些自动的配置- Springboot 中大量用到了条件注解
- 示例,以不同的操作系统作为条件,我们将通过实现
Condition接口,并重写其matches()方法来构造判断条件。若在 Windows 系统下运行程序,则输出列表命令为 dir ,若在 Linux 系统下运行程序,则输出列表命令为 ls判断 Window 条件
public class WindowsCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("os.name").contains("Windows");
}
}
判断 Linux 条件
public class LinuxCondition implements Condition {
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
return context.getEnvironment().getProperty("os.name").contains("Linux ");
}
}
不同系统下的 Bean 类
接口
public interface ListService {
String showListCmd();
}
Window 下所要创建的 Bean 类
public class WindowsListService implements ListService{
@Override
public String showListCmd() {
return "dir";
}
}
Linux 下所要创建的 Bean 类
public class LinuxListService implements ListService {
@Override
public String showListCmd() {
return "ls";
}
}
配置类
@Configuration
public class ConditionConfig { @Bean
@Conditional(WindowsCondition.class)
public ListService windowsListService(){
return new WindowsListService();
} @Bean
@Conditional(LinuxCondition.class)
public ListService linuxListService(){
return new LinuxListService();
} }
测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = Ch522Application.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class TaskTest { @Autowired
private ListService listService; @Test
public void conditionalTest() {
System.out.println(listService.showListCmd());
}
}
测试结果
dir
Springboot 条件注解的更多相关文章
- SpringBoot条件注解@Conditional
最近项目中使用到了关于@Conditional注解的一些特性,故写此文记录一下 @Conditional是啥呀? @Conditional注解是个什么东西呢,它可以根据代码中设置的条件装载不同的bea ...
- SpringBoot条件注解的总结
https://blog.csdn.net/qq_31142553/article/details/86439950
- 助力SpringBoot自动配置的条件注解ConditionalOnXXX分析--SpringBoot源码(三)
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 如何分析SpringBoot源码模块及结构?--SpringBoot源码(二) 上一篇分析了SpringBoo ...
- springboot自动装配(3)---条件注解@Conditional
之前有说到springboot自动装配的时候,都是去寻找一个XXXAutoConfiguration的配置类,然而我们的springboot的spring.factories文件中有各种组件的自动装配 ...
- SpringBoot的条件注解源码解析
SpringBoot的条件注解源码解析 @ConditionalOnBean.@ConditionalOnMissingBean 启动项目 会在ConfigurationClassBeanDefini ...
- [读书笔记] 二、条件注解@Conditional,组合注解,元注解
一.条件注解@Conditional,组合注解,元注解 1. @Conditional:满足特定条件创建一个Bean,SpringBoot就是利用这个特性进行自动配置的. 例子: 首先,两个Condi ...
- SpringBoot核心注解应用
1.今日大纲 了解Spring的发展 掌握Spring的java配置方式 学习Spring Boot 使用Spring Boot来改造购物车系统 2.Spring的发展 Spring1.x 时代 在S ...
- Spring_总结_04_高级配置(二)_条件注解@Conditional
一.前言 本文承接上一节:Spring_总结_04_高级配置(一)之Profile 在上一节,我们了解到 Profile 为不同环境下使用不同的配置提供了支持,那么Profile到底是如何实现的呢?其 ...
- 条件注解@Conditional
通过活动的profile,可以获得不同的Bean.Spring4提供了一个更通用的基于条件的Bean的创建,即使用@Conditonal注解 @Conditional根据满足某一个特定条件创建一个特定 ...
随机推荐
- Haproxy 让后端RS记录真实IP
一.修改haproxy.cfg配置文件,在defaults中加入如下两行,并重启haproxy. vim /etc/haproxy/haproxy.cfg defaults option http-s ...
- CentOS7 编译安装MySQL5.6.38(一)
一.下载MySQL5.6.38安装包 下载地址:https://www.mysql.com/downloads/ 打开网站之后选择Archives 然后再选择开源版本 选择我们要下载的版本: htt ...
- php迭代器模式(iterator pattern)
... <?php /* The iterator pattern is used to traverse a container and access its elements. In oth ...
- loadrunner自动订票脚本通用;loadrunner脚本参数化,设置检查点
Action() { web_reg_find("Text=Web Tours", LAST); web_reg_save_param("session", & ...
- String中intern方法的作用
前言 读完这篇文章你可以了解,String对象在虚拟机内存中的存放,intern的作用,这么多String对象的创建到底有什么区别,String 创建的对象有几个!! 正题 先科普几个知识点1.常量池 ...
- 微信开发:"errcode": -1000,"errmsg": "system error"错误的解决办法
最近在微信开发使用微信公众平台接口调试工具时遇到错误. 错误再现:使用appid及appsecret在该测试工具中获取access_token,检查问题时,校验全部通过,但是无法获取access_to ...
- php静态方法
静态方法 (1)静态方法不能访问这个类中的普通属性,因为那些属性属于一个对象,但可以访问静态属性: (2)从当前类(不是子类)中访问静态方法或属性,可以使用 self 关键字,self 指向当前类,就 ...
- 我的洛谷签名——Pale Blue Dot
We succeeded in taking that picture [from deep space], and, if you look at it, you see a dot. That's ...
- Python bytes类型及用法
bytes 类型 Python 3 新增了 bytes 类型,用于代表字节串,是一个类型,不是C#中的列表. 字符串(str)由多个字符组成,以字符为单位进行操作: 字节串(bytes)由多个字节组成 ...
- STL str replace
#include <iostream> #include <string> using namespace std; void main() { string s=" ...