如何检查 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 启动应用程序具有特定注释时才匹配的条件?
我认为最简单的方法是
- 将@Import 注释添加到您的@EnableResourceServer 注释class 并传入您的配置class
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(ResourceServerAutoConfiguration.class)
public @interface EnableResourceServer {
}
- 从 spring.factories 文件的自动配置块中删除 ResourceServerAutoConfiguration,使其不再自动配置。
这应该会导致仅在存在注释时才加载配置,即。
@SpringBootApplication
@EnableResourceServer
public class NotificationAdapterApplication {
}
我正在创建我自己的 spring 启动器以集中我项目中的一些常用配置。我想让我的@Configuration 类 仅匹配,如果我的 spring 启动应用程序以某种方式注释,如下所示:
@SpringBootApplication
@EnableResourceServer
public class MyApplication {
...
当我使用@ConditionalOnClass 时:
@Configuration
@ConditionalOnClass({EnableResourceServer.class})
class ResourceServerAutoConfiguration
即使应用不是资源服务器(注释不存在),使用依赖项时自动配置也匹配。
是否存在仅当 spring 启动应用程序具有特定注释时才匹配的条件?
我认为最简单的方法是
- 将@Import 注释添加到您的@EnableResourceServer 注释class 并传入您的配置class
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Import(ResourceServerAutoConfiguration.class) public @interface EnableResourceServer { }
- 从 spring.factories 文件的自动配置块中删除 ResourceServerAutoConfiguration,使其不再自动配置。
这应该会导致仅在存在注释时才加载配置,即。
@SpringBootApplication
@EnableResourceServer
public class NotificationAdapterApplication {
}