我想让我的spring-boot配置类A
依赖于另一个配置类B
,即A
仅在B
评估配置时才评估配置。
在实际情况下,我有数百种Ai
配置,只有一种B
,并且我想Ai
通过仅B
在测试期间排除的方式来实现一种排除所有配置的方式。
我尝试了以下方法:
@Configuration
@ConditionalOnBean(type = "org.my.B")
public class A1AutoConfiguration {
// ...
}
Run Code Online (Sandbox Code Playgroud)
哪里B
是无条件的配置类。
但是,当我跑mvn spring-boot:run -Ddebug=true
我看到,A
是永远不会计算,因为B
缺少。虽然在内部创建的Bean B
在应用程序上下文中,但B
本身不在。
虽然我可以使Ai
配置类依赖于内部创建的bean, B
但是我不太喜欢这种解决方案。
有没有更清洁(且可行)的方式来实现这种依赖机制?
我正在尝试@Enable
为 Spring 框架编写自己的注释,应按如下方式使用:
package com.example.package.app;
@SpringBootApplication
@com.example.annotations.EnableCustom("com.example.package.custom")
public class MyApplication {}
Run Code Online (Sandbox Code Playgroud)
我使用自定义注释遵循Component scan,但这带来了几个限制:
我不能使基本包属性动态化,即我不能传递"com.example.package.base"
,但需要在配置中预定义包。
我看了看@AliasFor
,但无法让它工作。
当我省略基础包时,扫描从注释的定义包开始,而不是从被注释的类的包开始。在上面的例子中,它只会为 中的类扫描和创建 bean com.example.annotations
,而不是为com.example.package.*
.
我看了一下EntityScanPackages.Registrar.class
在@EntityScan
注释中导入的是哪个,但它是一个内部类,我的注释无法导入。
一切正常,如果我把@ComponentScan(includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, value = MyAnnotation.class))
在MyApplication
类,但停止时这个被移动到的元注释工作@EnableCustom
。如何告诉 Spring Framework 将其视为@EnableCustom
指定@ComponentScan
某些默认值的不同方式。我试着元注解注释我用@Configuration
,@Component
和其他人,但没有成功:
@Configuration
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@ComponentScan(
includeFilters = @ComponentScan.Filter(
type = FilterType.ANNOTATION,
value = ApplicationService.class))
public @interface EnableApplicationServices {
@AliasFor(annotation …
Run Code Online (Sandbox Code Playgroud) java spring spring-annotations component-scan spring-autoconfiguration