您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在Spring的运行时注册bean(原型)

在Spring的运行时注册bean(原型)

这纯粹是我的观点,而不是专家的观点:

Spring提供了两种用于自定义修改应用程序上下文的机制-使用beanfactoryPostProcessor允许修改现有的Bean定义或添加新的Bean定义,以及BeanPostProcessors允许修改Bean实例(将它们围绕在代理等周围)。

Spring没有提供任何其他本机方式来在运行时动态添加Bean定义或Bean实例,但是就像你已经掌握了底层Bean工厂实例并添加Bean定义一样,这是一种方法。它有效,但是存在风险:

如果用新类型覆盖现有的Bean名称,会发生什么情况,如何处理已经注入该Bean的位置。而且,如果现有的Bean名称被完全不同的类型覆盖,会发生什么!

这个新注册的Bean将不会自动插入任何字段,也不会注入到其他Bean中-因此本质上说,该Bean工厂纯粹是作为保存该Bean的注册表,而不是真正的依赖项注入功能

如果refresh()在应用程序上下文中调用a,则支持Bean工厂将被覆盖并创建一个新的bean,因此直接向该bean工厂注册的所有bean实例都将丢失。

如果目标是纯粹创建由Spring自动装配的bean,那么我会选择@Configurable之类的东西。如果上述风险可以接受,那么你的方法也应该可行。

Java 2022/1/1 18:22:14 有420人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶