Spring Boot @Conditional注解用法示例介绍
作者:smileNicky 时间:2023-04-18 22:51:51
引用Spring官方文档的说法介绍一下@Conditional注解:Spring5.0.15版本@Conditional注解官方文档
@Conditional表示仅当所有指定条件都匹配时,组件才有资格注册 。
该@Conditional注释可以在以下任一方式使用:
作为任何@Bean方法的方法级注释
作为任何类的直接或间接注释的类型级别注释 @Component,包括@Configuration类
作为元注释,目的是组成自定义构造型注释
改注解主要源码之一,通过match匹配,符合条件才装载到Spring容器
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
if (context.getEnvironment() != null) {
// Read the @Profile annotation attributes
MultiValueMap<String, Object> attrs = metadata.getAllAnnotationAttributes(Profile.class.getName());
if (attrs != null) {
for (Object value : attrs.get("value")) {
if (context.getEnvironment().acceptsProfiles(((String[]) value))) {
return true;
}
}
return false;
}
}
return true;
}
作用:总而言之,只有@Conditional指定的条件成立,才给容器添加组件
@Conditional派生注解:@Conditional派生了很多注解,下面给个表格列举一下派生注解的用法
@Conditional派生注解 | 作用(都是判断是否符合指定的条件) |
---|---|
@ConditionalOnJava | 系统的java版本是否符合要求 |
@ConditionalOnBean | 有指定的Bean类 |
@ConditionalOnMissingBean | 没有指定的bean类 |
@ConditionalOnExpression | 符合指定的SpEL表达式 |
@ConditionalOnClass | 有指定的类 |
@ConditionalOnMissingClass | 没有指定的类 |
@ConditionalOnSingleCandidate | 容器只有一个指定的bean,或者这个bean是首选bean |
@ConditionalOnProperty | 指定的property属性有指定的值 |
@ConditionalOnResource | 路径下存在指定的资源 |
@ConditionalOnWebApplication | 系统环境是web环境 |
@ConditionalOnNotWebApplication | 系统环境不是web环境 |
@ConditionalOnjndi | JNDI存在指定的项 |
来源:https://www.cnblogs.com/mzq123/p/11874128.html
标签:springboot,注解
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java枚举类用法实例
2023-09-25 01:47:34
AJAX SpringBoot 前后端数据交互的项目实现
2023-11-24 05:49:48
![](https://img.aspxhome.com/file/2023/7/59857_0s.png)
IntelliJ IDEA(2020.2)的下载、安装步骤详细教程
2023-11-25 07:10:16
![](https://img.aspxhome.com/file/2023/0/59900_0s.png)
Spring AOP实现接口请求记录到数据库的示例代码
2023-08-15 19:14:05
![](https://img.aspxhome.com/file/2023/4/58064_0s.png)
搭建MyBatis-Plus框架并进行数据库增删改查功能
2023-11-09 04:33:43
![](https://img.aspxhome.com/file/2023/7/59167_0s.png)
JAVA8 十大新特性详解
2023-07-02 10:03:27
Java对zip,rar,7z文件带密码解压实例详解
2023-11-29 05:08:32
![](https://img.aspxhome.com/file/2023/4/60674_0s.png)
一篇带你解析入门LongAdder源码
2023-11-28 20:17:52
![](https://img.aspxhome.com/file/2023/1/60401_0s.png)
java中如何截取字符串最后一位
2023-11-27 00:51:16
![](https://img.aspxhome.com/file/2023/6/60376_0s.png)
Mybatis中 mapper-locations和@MapperScan的作用
2023-07-13 08:08:34
![](https://img.aspxhome.com/file/2023/0/57700_0s.png)
MyBatis3源码解析之如何获取数据源详解
2023-12-06 02:23:08
![](https://img.aspxhome.com/file/2023/3/60903_0s.jpg)
Spring AOP底层原理及代理模式
2023-05-05 14:19:38
Java servlet、filter、listener、interceptor之间的区别和联系
2023-11-02 15:32:17
Java基础:流Stream详解
2023-11-29 06:11:14
![](https://img.aspxhome.com/file/2023/6/60086_0s.jpg)
Java中计算时间差的方法
2023-11-15 10:35:44
flutter material widget组件之信息展示组件使用详解
2023-06-22 08:45:35
SpringBoot之通过BeanPostProcessor动态注入ID生成器案例详解
2023-11-24 22:17:26
![](https://img.aspxhome.com/file/2023/1/59251_0s.jpg)
一文搞懂Mybatis-plus的分页查询操作
2023-11-25 10:23:17
springmvc 分页查询的简单实现示例代码
2022-01-09 11:08:22
Java中ReentrantLock4种常见的坑
2021-09-26 10:51:46
![](https://img.aspxhome.com/file/2023/3/61133_0s.webp)