首页 > 其他分享 >【Spring】条件装配 @ConditionalOnClass @ConditionalOnBean

【Spring】条件装配 @ConditionalOnClass @ConditionalOnBean

时间:2023-07-18 14:47:30浏览次数:49  
标签:ConditionalOnClass Spring 指定 应用程序 bean 创建 ConditionalOnBean 注解

@ConditionalOnClass 是 Spring Framework 提供的一个注解,用于在应用程序上下文加载过程中根据类的存在与否来决定是否创建或配置某个 bean。

通常情况下,当应用程序上下文加载时,Spring 会根据配置文件或注解等方式定义的 bean 定义来创建对象,并将其加入到 bean 集合中。然而,有时候我们希望只在某些特定的类存在时才创建或配置某个 bean。这时候,就可以使用 @ConditionalOnClass 注解。

@ConditionalOnClass 注解可以用于类或接口上,它的作用是检查指定类或接口是否存在于应用程序上下文中。如果存在,则进行相应的 bean 创建或配置;如果不存在,则忽略该 bean 的创建或配置。

下面是一个示例:

@Configuration  
@ConditionalOnClass(value = {MyClass.class, OtherClass.class})  
public class MyConfiguration {  
      
    @Bean  
    public MyBean myBean() {  
        return new MyBean();  
    }  
}

 

在这个示例中,MyConfiguration 类上使用了 @ConditionalOnClass 注解,并指定了需要检查的类 MyClass 和 OtherClass。如果这两个类都存在于应用程序上下文中,那么 MyConfiguration 类中的 myBean 方法将会被调用,并返回一个 MyBean 对象。否则,这个 bean 将不会被创建或配置。

需要注意的是,@ConditionalOnClass 注解只能检查类或接口是否存在于应用程序上下文中,而不能检查类的实例是否已经存在。如果需要检查类的实例是否存在,可以使用 @ConditionalOnBean 注解。

下面是一个示例:

@Configuration  
@ConditionalOnBean(value = MyBean.class)  
public class MyConfiguration {  
      
    @Bean  
    public OtherBean otherBean() {  
        return new OtherBean();  
    }  
}

在这个示例中,MyConfiguration 类上使用了 @ConditionalOnBean 注解,并指定了需要检查的类 MyBean。如果 MyBean 的实例存在于应用程序上下文中,那么 MyConfiguration 类中的 otherBean 方法将会被调用,并返回一个 OtherBean 对象。否则,这个 bean 将不会被创建或配置。

 

在Spring中,有许多与条件装配相关的注解。这些注解可以帮助我们更方便地实现条件装配。以下是一些常用的条件装配注解:

  1. @Conditional:这是一个通用的条件装配注解,可以用于任何情况下的条件装配。它需要指定一个实现了Condition接口的类,用于判断是否满足条件。

  2. @ConditionalOnBean:当容器中存在某个指定的bean时,才会创建被注解的bean。

  3. @ConditionalOnMissingBean:当容器中不存在某个指定的bean时,才会创建被注解的bean。

  4. @ConditionalOnClass:当类路径下存在某个指定的类时,才会创建被注解的bean。

  5. @ConditionalOnMissingClass:当类路径下不存在某个指定的类时,才会创建被注解的bean。

  6. @ConditionalOnProperty:当指定的属性存在且值为指定值时,才会创建被注解的bean。

  7. @ConditionalOnResource:当指定的资源存在时,才会创建被注解的bean。

  8. @ConditionalOnWebApplication:当应用程序是一个Web应用程序时,才会创建被注解的bean。

  9. @ConditionalOnNotWebApplication:当应用程序不是一个Web应用程序时,才会创建被注解的bean。

  10. @ConditionalOnExpression:当指定的SpEL表达式计算结果为true时才进行装配。

这些注解都是基于@Conditional注解实现的,可以方便地进行条件装配。使用这些注解可以使得代码更加简洁、易于维护。

 

标签:ConditionalOnClass,Spring,指定,应用程序,bean,创建,ConditionalOnBean,注解
From: https://www.cnblogs.com/cuipengchong/p/17562962.html

相关文章

  • SSM - SpringMVC - Syntax
    1.环境搭建导入包:junit,servlet-api,jsp-api,jstl,spring-context(5.3.29)早期版本回顾@ https://docs.spring.io/spring-framework/docs/4.3.24.RELEASE/spring-framework-reference/ ,里面介绍了很多基本和基础概念所有版本下载@ https://repo.spring.io/release/......
  • SpringBoot如何解决跨域问题
    什么是跨域跨域问题的本质是浏览器为了保证用户的一种安全拦截机制,它的初衷是为了保证用户的安全,防止恶意网站窃取数据。跨域三种情况在发起请求时,如果出现了以下情况中的任意一种,那么它就是跨域请求:协议不同,如http和https;域名不同;端口不同。也就是说,即使域名相......
  • 面试官:一个 SpringBoot 项目能处理多少请求?(小心有坑)
    你好呀,我是歪歪。这篇文章带大家盘一个读者遇到的面试题哈。根据读者转述,面试官的原问题就是:一个SpringBoot项目能同时处理多少请求?不知道你听到这个问题之后的第一反应是什么。我大概知道他要问的是哪个方向,但是对于这种只有一句话的面试题,我的第一反应是:会不会有坑?所以并......
  • SpringBoot启动类变灰色,无法启动,注解通通不生效
    1:自己准备创建SpringBoot项目时,严格按照要求创建后,变成了这样。启动类运行不了,@SpringBootApplication注解也是黑色。而正常的是蓝色,注解是黄色。2:通过查询博主java文件夹标记为sourcesroot目录,右上角选择蓝色框框,然后选择Modules,最后把java、resources、test分别配置好。 ......
  • SpringBoot官方笔记4Web
    Mostwebapplicationsusethe spring-boot-starter-web moduletogetupandrunningquickly.Youcanalsochoosetobuildreactivewebapplicationsbyusingthe spring-boot-starter-webflux module.ServletWebApplicationsSpringWebMVCFrameworkimportja......
  • SpringBoot官方笔记3核心
    SpringApplicationBydefault, INFO loggingmessagesareshown,includingsomerelevantstartupdetails,suchastheuserthatlaunchedtheapplication.LazyInitializationWhenlazyinitializationisenabled,beansarecreatedastheyareneededratherth......
  • SpringBoot官方笔记7IO
    CachingSpringBootauto-configuresthecacheinfrastructureaslongascachingsupportisenabledbyusingthe @EnableCaching annotation.importorg.springframework.cache.annotation.Cacheable;importorg.springframework.stereotype.Component;@Component......
  • SpringBoot官方笔记6消息
    TheSpringFrameworkprovidesextensivesupportforintegratingwithmessagingsystems,fromsimplifieduseoftheJMSAPIusing JmsTemplate toacompleteinfrastructuretoreceivemessagesasynchronously.SpringAMQPprovidesasimilarfeaturesetforth......
  • SpringBoot官方笔记5Data
    SpringBootintegrateswithanumberofdatatechnologies,bothSQLandNoSQL.SQLDatabasesSpringData providesanadditionalleveloffunctionality:creating Repository implementationsdirectlyfrominterfacesandusingconventionstogeneratequeries......
  • SpringBoot官方笔记8其他
    ContainerImagesFROMeclipse-temurin:17-jreasbuilderWORKDIRapplicationARGJAR_FILE=target/*.jarCOPY${JAR_FILE}application.jarRUNjava-Djarmode=layertools-jarapplication.jarextractFROMeclipse-temurin:17-jreWORKDIRapplicationCOPY--from=......