上一题下一题

BeanDefinitionRegistry动态注册Bean时遗漏BeanPostProcessor的风险

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

使用 BeanDefinitionRegistry 动态注册 BeanDefinition,本身并不一定会遗漏 BeanPostProcessor。关键在于注册时机和 Bean 的创建方式。

如果是在 Spring 容器启动阶段,例如 BeanDefinitionRegistryPostProcessor postProcessBeanDefinitionRegistry 中注册,后续容器会正常注册并执行 BeanFactoryPostProcessor、BeanPostProcessor,因此通过容器创建的 Bean 通常可以享受到依赖注入、AOP、事务、@Autowired、@PostConstruct 等处理。

风险主要出现在容器已经完成刷新之后动态注册,或者绕过容器手动实例化 Bean:

直接 new 对象并调用 registerSingleton,不会自动执行完整的 Bean 创建流程,可能遗漏依赖注入、初始化方法、AOP 代理、事务代理等。 动态注册后如果直接拿到原始对象使用,可能没有经过 `postProcessBefor

登录后查看完整内容