如何检查spring boot应用程序在自动配置类中是不是有某个注释

Posted

技术标签:

【中文标题】如何检查spring boot应用程序在自动配置类中是不是有某个注释【英文标题】:How to check if an spring boot application has a certain annotation in autoconfiguration class如何检查spring boot应用程序在自动配置类中是否有某个注释 【发布时间】:2019-11-15 22:38:49 【问题描述】:

我正在创建自己的 spring boot 启动器来集中我项目中的一些常见配置。我想让我的 @Configuration 类只匹配,如果我的 Spring Boot 应用程序以某种方式注释,如下所示:

@SpringBootApplication
@EnableResourceServer
public class MyApplication 
...

当我使用@ConditionalOnClass 时:

@Configuration
@ConditionalOnClass(EnableResourceServer.class)
class ResourceServerAutoConfiguration 

即使应用程序不是资源服务器(不存在注释),使用依赖项时也会匹配自动配置。

是否存在仅当 spring boot 应用存在某个注解时才匹配的条件?

【问题讨论】:

【参考方案1】:

我相信最简单的方法是

    将@Import 注解添加到您的@EnableResourceServer 注解类并传入您的配置类
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(ResourceServerAutoConfiguration.class)
public @interface EnableResourceServer 

    从 spring.factories 文件的自动配置块中删除 ResourceServerAutoConfiguration,使其不再自动配置。

这应该导致配置仅在注释存在时加载,即。

@SpringBootApplication
@EnableResourceServer
public class NotificationAdapterApplication 

【讨论】:

非常感谢,这对我有用。不知道可以在注释上使用@Import。

以上是关于如何检查spring boot应用程序在自动配置类中是不是有某个注释的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot参考教程Spring Boot配置使用之配置类用法

如何编写Spring-Boot自动配置

在 Spring Boot 中自动生成 API 文档 [关闭]

Spring Boot 2从入门到入坟 | 自动配置篇:源码分析之AopAutoConfiguration自动配置类

Spring Boot 2从入门到入坟 | 自动配置篇:源码分析之AopAutoConfiguration自动配置类

Spring boot 自定义starter