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根据满足某一个特定条件创建一个特定 ...
随机推荐
- 第十周LINUX 学习笔记
LVS集群nat丶DR HA:高可用 平均无故障时间/(平均无故障时间+平均修复时间) 负载均衡 次序lb(负载)——>ha()LB tcp:lvs,haproxy 应用 ...
- PAT 乙级 1007.素数对猜想 C++/Java
1007 素数对猜想 (20 分) 题目来源 让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数.显然有d1=1,且对于n>1有dn是偶数.“ ...
- python测试开发django-68.templates模板标签{% for %}
前言 有些标签类似这样: {% tag %} ,需要开始和结束标签 例如:{% tag %} ...标签 内容 ... {% endtag %},一般用于循环列表对象输出内容. for 标签 {% f ...
- Beta冲刺博客汇总(校园帮-追光的人)
所属课程 软件工程1916 作业要求 Beta冲刺博客汇总 团队名称 追光的人 作业目标 汇总Beta阶段的博客,方便查看 冲刺日志 Beta之前-凡事预则立(校园帮-追光的人)5-22 Beta冲刺 ...
- url 组成
- easyui datebox 只显示日期,本文为转载,稍加改动
var DateBoxHandler = {}; DateBoxHandler.onlyShowMonth = function(id) { function padding(v) {if (v &l ...
- SQL语言基础和数据库操作
Sql语言基础: 核心思想:我们自己构造一段查询的代码,然后添加到语句后,从而得到想要的某些数据. Mysql是一种开源数据库 APP Serv:Apache+php+mysql,相当于phpstud ...
- sed命令基本用法
sed是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑sed 适用于以下三种场合:编辑相对交互式文本编辑器而言太大的文件编辑命令太复杂,在交互式文本编辑器中难以输入的情况对文本扫描一遍,但是 ...
- sublime中文解决
1.写好文件sublime_imfix.c并保存. #include <gtk/gtkimcontext.h> void gtk_im_context_set_client_window ...
- 欢迎访问阿里云Go Module代理仓库服务
简介 go module公共代理仓库,代理并缓存go模块.你可以利用该代理来避免DNS污染导致的模块拉取缓慢或失败的问题,加速你的构建. 地址 https://mirrors.aliyun.com/g ...