@Conditional+@Configuration有没有搞头?
2024/1/8 18:02:22
本文主要是介绍@Conditional+@Configuration有没有搞头?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
日拱一卒,功不唐捐。
在了解 @Conditional 之前先花 10 秒钟复习一下 @Configuration 这个注解。
@Configuration 是干什么?
是配合 @Bean 注解来配置 Spring 容器的 bean 的。
那它为什么会出现呢?
因为配置 bean 的另一种方式是 xml ,狗都不用。
那给个示例看看呗?
简单。
@Configuration public class AppConfig { @Bean public MyBean myBean() { // 初始化, 配置, 返回bean... } }
下面进入主题:
@Conditional 是什么东西?
首先明确第一点:
@Conditional 是 Spring 提供的。
其次明确第二点:
Conditional 中文译为:有条件的,依...而定的。
前边既然讲了 @Configuration 的简单用法,那么问题就是:
@Configuration + @Conditional 有没有搞头?
有搞头。
怎么搞?
那就是可以给@Configuration加上一个开关。
我打开开关,你这配置就好用。
我关闭开关,你这配置就不好用。
进一步升级。
我给 @Configuration 里的 @Bean 加一个开关。
我打开开关,你这 bean 就注册。
我关闭开关,你这 bean 就不注册。
那开关在哪里呢?
废话不多说,先上代码。
@Configuration @Conditional(MyCondition.class) public class ConditionConfig { @Bean public ConditionBean conditionBean() { return new ConditionBean(); } }
开关就是代码中的 MyCondition.class。
WTF is MyCondition.class ?
MyCondition类就是我们自定义的开关,我们定义什么时候开,什么时候关的逻辑。
很明显这个逻辑不可能是 Spring 给的。
但 Spring 又必须插手管理。
通过什么呢?
没错,通过接口 Condition。
这个接口中什么都没有,只有一个 matches 方法,返回一个 boolean 值。
显而易见,你返回 true, 开关打开,返回 false,开关关闭。
MyCondition 类代码如下:
public class MyCondition implements Condition { @Override public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) { return true; } }
可以看到 matches 方法中的两个参数,可以简单介绍一下。
ConditionContext context 这个参数提供了一种方法来访问关于Spring容器的信息。
AnnotatedTypeMetadata metadata 这个参数提供了对被注解类的元数据的访问。
基于这两个参数我们就可以创建复杂和动态的条件来控制开关的闭合。
例如,你可以基于环境变量、定义的bean、类的存在等因素,来决定是否创建某个bean。
除了自定义 Condition,Springboot 还为我们扩展了一些常用的 Condition。
这篇关于@Conditional+@Configuration有没有搞头?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15在使用平台私钥进行解密时提示 "私钥解密失败" 错误信息是什么原因?-icode9专业技术文章分享
- 2024-11-15Layui框架有哪些方式引入?-icode9专业技术文章分享
- 2024-11-15Layui框架中有哪些减少对全局环境的污染方法?-icode9专业技术文章分享
- 2024-11-15laydate怎么关闭自动的日期格式校验功能?-icode9专业技术文章分享
- 2024-11-15laydate怎么取消初始日期校验?-icode9专业技术文章分享
- 2024-11-15SendGrid 的邮件发送时,怎么设置回复邮箱?-icode9专业技术文章分享
- 2024-11-15使用 SendGrid API 发送邮件后获取到唯一的请求 ID?-icode9专业技术文章分享
- 2024-11-15mailgun 发送邮件 tags标签最多有多少个?-icode9专业技术文章分享
- 2024-11-15mailgun 发送邮件 怎么批量发送给多个人?-icode9专业技术文章分享
- 2024-11-15如何搭建web开发环境并实现 web项目在浏览器中访问?-icode9专业技术文章分享