相关疑难解决方法(0)

如何以其他配置为条件的配置?

我想让我的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但是我不太喜欢这种解决方案。

有没有更清洁(且可行)的方式来实现这种依赖机制?

spring-boot

5
推荐指数
1
解决办法
5140
查看次数

Spring 自定义 @Enable 注释元注释与 @ComponentScan

我正在尝试@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,但这带来了几个限制:

  1. 我不能使基本包属性动态化,即我不能传递"com.example.package.base",但需要在配置中预定义包。

    我看了看@AliasFor,但无法让它工作。

  2. 当我省略基础包时,扫描从注释的定义包开始,而不是从被注释的类的包开始。在上面的例子中,它只会为 中的类扫描和创建 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

5
推荐指数
1
解决办法
1360
查看次数