作者:微信小助手
发布时间:2022-06-04T00:33:35
不知道大家在使用Spring Boot开发的日常中有没有用过 今天这篇文章就从前世今生介绍一下该类注解。 本文基于的Spring Boot的版本是 该注解的源码其实很简单,只有一个属性@Conditionalxxx
注解,比如@ConditionalOnMissingBean
。相信看过Spring Boot源码的朋友一定不陌生。@Conditionalxxx
这类注解表示某种判断条件成立时才会执行相关操作。掌握该类注解,有助于日常开发,框架的搭建。Spring Boot 版本
2.3.4.RELEASE
。@Conditional
@Conditional
注解是从Spring4.0
才有的,可以用在任何类型或者方法上面,通过@Conditional
注解可以配置一些条件判断,当所有条件都满足的时候,被@Conditional
标注的目标才会被Spring容器
处理。@Conditional
的使用很广,比如控制某个Bean
是否需要注册,在Spring Boot中的变形很多,比如@ConditionalOnMissingBean
、@ConditionalOnBean
等等,如下:
value
,表示判断的条件(一个或者多个),是org.springframework.context.annotation.Condition
类型,源码如下:@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Conditional {
/**
* All {@link Condition} classes that must {@linkplain Condition#matches match}
* in order for the component to be registered.
*/
Class<? extends Condition>[] value();
}@Conditional
注解实现的原理很简单,就是通过org.springframework.context.annotation.Condition
这个接口判断是否应该执行操作。Condition接口
@Conditional
注解判断条件与否取决于value
属性指定的Condition
实现,其中有一个matches()
方法,返回true
表示条件成立,反之不成立,接口如下: