gpt4 book ai didi

java - 在自动配置期间由 ImportBeanDefinitionRegistrar 创建的 Bean 不适合所有 Bean 后处理器

转载 作者:太空宇宙 更新时间:2023-11-04 09:05:14 25 4
gpt4 key购买 nike

我已经实现了 ImportBeanDefinitionRegistrar 以从外部源创建 bean 定义。它必须是注册商,因为我事先不知道将创建多少个 bean 定义。

当我在我的应用程序类上使用注册器时,如下所示:

@SpringBootApplication
@Import(GenesysRegistrar.class)
public class IntegrationServer {
...
}

一切正常。

我想让每个使用包含注册器的 JAR 的应用程序自动导入,因此我创建了以下类:

@Configuration
@Import(GenesysRegistrar.class)
public class GenesysAutoConfiguration {
/**/
}

并在 META-INF/spring.factories 的 org.springframework.boot.autoconfigure.EnableAutoConfiguration 下注册它。

现在自动配置可以工作,但我在日志中收到以下消息:

Bean 'xxx' of type [XXX] is not eligible for getting processed by all BeanPostProcessors

从应用程序类和自动配置类导入注册表有什么区别?我发现以下后处理器是在我的 beans 之后创建的:

methodValidationPostProcessor
persistenceExceptionTranslationPostProcessor
webServerFactoryCustomizerBeanPostProcessor
errorPageRegistrarBeanPostProcessor

我尝试将 @AutoConfigureOrder(Integer.MAX_VALUE) 放在我的自动配置类上,但它不会改变任何内容。

有什么想法可以修复顺序,以便在所有后处理器之后处理我的注册商创建的定义中的 bean?为什么 Spring 在所有后处理器之前创建它们?为什么在应用程序类上使用 @Import 时不会发生此问题?

最佳答案

早期初始化的bean是通过构造函数注入(inject)注入(inject)到其他bean工厂的依赖项。

如果 Bean 工厂使用属性注入(inject)而不是构造函数注入(inject),则不会发生这种情况。

问题是工厂 bean 上的构造函数注入(inject)是否是“不好的做法”——没有发现任何禁止它的东西。

创建了 spring-boot 的票证(因为它仅在启动自动配置期间发生): Issue #20219

关于java - 在自动配置期间由 ImportBeanDefinitionRegistrar 创建的 Bean 不适合所有 Bean 后处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60281822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com