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
登录后查看完整内容
