1

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

@SpringBootApplication
@EnableResourceServer
public class MyApplication {
...

当我使用@ConditionalOnClass 时:

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

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

是否存在仅在 Spring Boot 应用程序存在某个注释时才匹配的条件?

4

1 回答 1

2

我相信最简单的方法是

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

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

@SpringBootApplication
@EnableResourceServer
public class NotificationAdapterApplication {
}
于 2019-07-06T18:42:59.537 回答