我正在尝试在 Spring Boot 中动态注册 Bean,但是NoSuchBeanDefinitionException
如果尝试自动装配其中一个动态 bean,则创建 bean 的顺序总是会导致。
我的设置包括两个项目,一个 spring-boot-starter 项目和实际的 spring-boot 应用程序。
实际的应用程序注册一个BeanDefinitionRegistryPostProcessor
添加 bean 定义的。实例本身是通过在启动项目中定义的另一个 bean 构建的,该项目本身将另一个 bean 作为依赖项。
为了使用动态注册的 bean,我创建了一个带有注释的类,@Component
并定义了一个构造函数,期望该 bean 作为参数。当我通过设置调试应用程序时@Autowired(required=false)
,我可以看到我的组件的构造函数在创建动态bean之前被调用。而且,当时甚至还没有创建工厂 bean。
将工厂 bean 的名称添加@DependsOn
到组件导致首先创建工厂,而不是动态 bean。
使用动态 bean 的名称进行设置@DependsOn
是可行的,但这似乎不是解决此问题的正确方法。
为什么 Spring 以错误的顺序创建我的 bean,我能做些什么来解决这个问题?
编辑:
我能够在示例存储库中重现该问题:
https ://github.com/maveeee/spring-dynamic-bean-demo/