如何检查 spring 启动应用程序是否在自动配置中具有特定注释 class

How to check if an spring boot application has a certain annotation in autoconfiguration class

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

@SpringBootApplication
@EnableResourceServer
public class MyApplication {
...

当我使用@ConditionalOnClass 时:

@Configuration
@ConditionalOnClass({EnableResourceServer.class})
class ResourceServerAutoConfiguration 

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

是否存在仅当 spring 启动应用程序具有特定注释时才匹配的条件?

我认为最简单的方法是

  1. 将@Import 注释添加到您的@EnableResourceServer 注释class 并传入您的配置class
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(ResourceServerAutoConfiguration.class)
public @interface EnableResourceServer {
}
  1. 从 spring.factories 文件的自动配置块中删除 ResourceServerAutoConfiguration,使其不再自动配置。

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

@SpringBootApplication
@EnableResourceServer
public class NotificationAdapterApplication {
}