上一题下一题

registerSingleton与注册BeanDefinition在生命周期管理上的差异

旗舰版
来源:tencent中级工程师Spring依赖注入源码Spring后置处理器机制registerSingleton与BeanDefinition生命周期差异BeanDefinitionRegistry动态注册
草稿该题目为草稿状态,前台公开题库中不可见。
答案解析

在 Spring 中,registerSingleton 和注册 BeanDefinition 的核心区别是:前者把一个已经创建好的对象直接放进单例注册表,后者则向容器提供创建 Bean 的元数据,由容器负责后续管理。

通过 registerSingleton 注册时,对象通常已经由外部创建和初始化。容器可以按名称获取它,也可能将它用于依赖注入,但一般不会再为它执行常规的 Bean 创建流程,比如属性填充、Aware 回调、BeanPostProcessor、初始化方法,也不会像管理标准 Bean 那样自动完成销毁回调。

注册 BeanDefinition 后,容器会按照定义创建 Bean,并管理完整生命周期:实例化、依赖注入、各种后置处理器以及初始化回调;容器关闭时,也会根据配置调用销毁方法。它还能声明作用域、依赖关系、工厂方法等信息。

所以,如果对象由 Spring 创建并需要完整生命周期管理,通常注册 BeanDefinition;如果对象由外部系统创建,只需要放进容器供查找或注入,可以使用 registerSingleton,但要注意生命周

登录后查看完整内容