registerSingleton与注册BeanDefinition在生命周期管理上的差异
旗舰版来源:tencent中级工程师Spring依赖注入源码Spring后置处理器机制registerSingleton与BeanDefinition生命周期差异BeanDefinitionRegistry动态注册
草稿
答案解析
在 Spring 中,registerSingleton 和注册 BeanDefinition 的核心区别是:前者把一个已经创建好的对象直接放进单例注册表,后者则向容器提供创建 Bean 的元数据,由容器负责后续管理。
通过 registerSingleton 注册时,对象通常已经由外部创建和初始化。容器可以按名称获取它,也可能将它用于依赖注入,但一般不会再为它执行常规的 Bean 创建流程,比如属性填充、Aware 回调、BeanPostProcessor、初始化方法,也不会像管理标准 Bean 那样自动完成销毁回调。
注册 BeanDefinition 后,容器会按照定义创建 Bean,并管理完整生命周期:实例化、依赖注入、各种后置处理器以及初始化回调;容器关闭时,也会根据配置调用销毁方法。它还能声明作用域、依赖关系、工厂方法等信息。
所以,如果对象由 Spring 创建并需要完整生命周期管理,通常注册 BeanDefinition;如果对象由外部系统创建,只需要放进容器供查找或注入,可以使用 registerSingleton,但要注意生命周
登录后查看完整内容
