- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经实现了 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/
我的用例处理动态创建 bean。我发现它们是注册 bean 定义的两个选项:ImportBeanDefinitionRegistrar和 BeanDefinitionRegistryPostProce
我有一个@ConfigurationProperties POJO。我希望能够在 ImportBeanDefinitionRegistrar 中访问它 @ConfigurationProperties
我已经实现了 ImportBeanDefinitionRegistrar 以从外部源创建 bean 定义。它必须是注册商,因为我事先不知道将创建多少个 bean 定义。 当我在我的应用程序类上使用注册
我是一名优秀的程序员,十分优秀!