手工registerSingleton对象为何可能跳过依赖注入和初始化回调
进阶版来源:netease中级工程师Spring依赖注入源码@Async代理机制Spring事件监听机制
答案解析
在 Spring 中,手工调用 registerSingleton,本质上是把一个已经创建好的对象直接放入单例缓存,例如 singletonObjects,Spring 会认为这个对象已经完成了实例化和初始化,不会再按正常 Bean 创建流程处理。
因此它可能跳过以下步骤:
依赖注入:不会自动执行属性注入、@Autowired、@Resource 等操作。对象需要的依赖必须在注册前手动准备好,或者通过构造方法传入。 初始化回调:通常不会自动执行 @PostConstruct、InitializingBean afterPropertiesSet、自定义 init method 等初始化逻辑。 Bean 后置处理器:不会完整执行正常创建流程中的 BeanPostProcessor,因此一些代理对象、AOP 增强、事务代理、异步代理等也可能不会生成。 销毁回调:直接注册的对象通常不会自动纳入完整的销毁管理,@PreDestroy、DisposableBean destroy 等回调不一定会按预期执行,除非额外注册销毁适配器或手动处
登录后查看完整内容
