Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ImportBeanDefinitionRegistrator在自动配置期间创建的bean不适用于所有bean后处理器_Java_Spring_Spring Boot - Fatal编程技术网

Java 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

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

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

@SpringBootApplication
@Import(GenesysRegistrar.class)
public class IntegrationServer {
...
}
一切正常

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

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

并在META-INF/spring.factories中的key
org.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”。