Java ImportBeanDefinitionRegistrator在自动配置期间创建的bean不适用于所有bean后处理器
我已经实现了importBeanDefinitionRegistrator,以从外部源创建bean定义。它必须是注册器,因为我事先不知道将创建多少bean定义 当我在我的应用程序类中使用注册器时,如下所示:Java ImportBeanDefinitionRegistrator在自动配置期间创建的bean不适用于所有bean后处理器,java,spring,spring-boot,Java,Spring,Spring Boot,我已经实现了importBeanDefinitionRegistrator,以从外部源创建bean定义。它必须是注册器,因为我事先不知道将创建多少bean定义 当我在我的应用程序类中使用注册器时,如下所示: @SpringBootApplication @Import(GenesysRegistrar.class) public class IntegrationServer { ... } 一切正常 我想为每个使用包含注册器的JAR的应用程序自动导入,因此我创建了以下类: @Configur
@SpringBootApplication
@Import(GenesysRegistrar.class)
public class IntegrationServer {
...
}
一切正常
我想为每个使用包含注册器的JAR的应用程序自动导入,因此我创建了以下类:
@Configuration
@Import(GenesysRegistrar.class)
public class GenesysAutoConfiguration {
/**/
}
并在META-INF/spring.factories中的keyorg.springframework.boot.autoconfigure.EnableAutoConfiguration
下注册了它
现在自动配置可以工作了,但我在日志中收到以下消息:
Bean 'xxx' of type [XXX] is not eligible for getting processed by all BeanPostProcessors
从应用程序类导入注册表和从自动配置类导入注册表有什么区别?我发现以下后处理器是在我的bean之后创建的:
methodValidationPostProcessor
persistenceExceptionTranslationPostProcessor
webServerFactoryCustomizerBeanPostProcessor
errorPageRegistrarBeanPostProcessor
我已经尝试将@AutoConfigureOrder(Integer.MAX_VALUE)
放在我的自动配置类中,但它没有改变任何东西
有什么想法吗?我如何修复顺序,以便在所有后期处理之后处理注册器创建的定义中的bean?为什么Spring在所有后处理器之前创建它们?在应用程序类上使用@Import时,为什么没有出现问题?早期初始化的bean是通过构造函数注入注入到其他bean工厂的依赖项 如果bean工厂使用属性注入而不是construcotr注入,则不会发生这种情况 问题是,若工厂bean上的构造函数注入是“糟糕的做法”,那个么我们并没有发现任何禁止它的东西 已创建spring引导的票证(因为它仅在引导自动配置期间发生):
早期初始化的bean是通过构造函数注入注入到其他bean工厂的依赖项 如果bean工厂使用属性注入而不是construcotr注入,则不会发生这种情况 问题是,若工厂bean上的构造函数注入是“糟糕的做法”,那个么我们并没有发现任何禁止它的东西 已创建spring引导的票证(因为它仅在引导自动配置期间发生):
根本原因似乎是ValidationAutoConfiguration,它定义了methodValidationPostProcessor,需要自动连接环境(不带@Lazy)。在搜索环境时,Spring会触发由注册器定义的bean的初始化。由于(至少methodValidationPostProcessor)尚未创建,因此我收到了“不合格”警告。现在我想知道缺少@Lazy on Environment是否是我将向Spring报告的“错误”。似乎根本原因是ValidationAutoConfiguration,它定义了methodValidationPostProcessor,需要自动连接环境(没有@Lazy)。在搜索环境时,Spring会触发由注册器定义的bean的初始化。由于(至少methodValidationPostProcessor)尚未创建,因此我收到了“不合格”警告。现在我想知道缺少@Lazy on环境是否是我将向Spring报告的“bug”。