温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring中@Conditional条件注解如何使用

发布时间:2021-08-06 15:06:51 来源:亿速云 阅读:163 作者:Leah 栏目:编程语言

这篇文章将为大家详细讲解有关Spring中@Conditional条件注解如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。


@Conditional 元注解源

Spring中@Conditional条件注解如何使用

Spring中@Conditional条件注解如何使用

Conditional 接口源码

我们看到 @Conditional 注解接收的参数是 extends Condition 接口的泛型类,也就是说,我们要使用 @Conditional 注解,只需要实现 Condition 接口并重写其方法即可:

Spring中@Conditional条件注解如何使用

Spring中@Conditional条件注解如何使用

简单找下Spring家族其他的案例实现SpringBootCondition

Spring中@Conditional条件注解如何使用

Spring中@Conditional条件注解如何使用

Spring Boot使用的所有Condition实现的基础。提供合理的日志记录,以帮助用户诊断要加载的类。

无意中在网上看到一种比较形象的理解:如果将Application Context 比作大厅,Spring Boot 在 @Conditional 注解的基础上进行了细化,无需出示复杂的介绍信 (实现 Condition 接口),只需要手持预定义好的 @ConditionalOnXxxx 注解印章的门票,如果验证通过,就会走进 Application Context 大厅SpringBoot Condition 拓展实现

Spring中@Conditional条件注解如何使用

逐个打开这 13 个注解,我们发现这些注解上有相同的元注解

Spring中@Conditional条件注解如何使用

从这些标记上我们可以了解如下内容:

  • 都可以应用在 TYPE 上,也就是说,Spring 自动扫描的一切类 (@Configuration, @Component, @Service, @Repository, or @Controller) 都可以通过添加相应的 @ConditionalOnXxxx 来判断是否加载

  • 都可以应用在 METHOD 上,所以有 @Bean 标记的方法也可以应用这些注解

  • 都是用了 @Conditional 注解来标记,OnBeanCondition 等自定义 Condition 还是实现了 Condition 接口的,换汤不换药,没什么神秘的,只不过做了更具象的封装罢了,来看类依赖图(简化的类图)

Spring中@Conditional条件注解如何使用

其实用法都大同小异,看了源码以后发现原理很简单,这里简单归纳下用法:

除了自己自定义Condition之外,Spring还提供了很多Condition给我们用

  • @ConditionalOnBean
    仅仅在当前上下文中存在某个对象时,才会实例化一个Bean

  • @ConditionalOnClass
    某个class位于类路径上,才会实例化一个Bean

  • @ConditionalOnExpression
    当表达式为true的时候,才会实例化一个Bean

  • @ConditionalOnMissingBean
    仅仅在当前上下文中不存在某个对象时,才会实例化一个Bean

  • @ConditionalOnMissingClass
    某个class类路径上不存在的时候,才会实例化一个Bean

  • @ConditionalOnNotWebApplication
    不是web应用

  • @ConditionalOnProperty
    指在配置里配置的属性是否为true,才会实例化一个Bean)

  • @ConditionalOnResource
    如果我们要加载的 bean 依赖指定资源是否存在于 classpath 中,那么我们就可以使用这个注解

  • @ConditionalOnJndi
    只有指定的资源通过 JNDI 加载后才加载 bean

  • @ConditionalOnCloudPlatform
    只有运行在指定的云平台上才加载指定的 bean,CloudPlatform 是 org.springframework.boot.cloud 下一个 enum 类型的类,大家可以打开自行看看

关于Spring中@Conditional条件注解如何使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI