在spring中 BeanFactoryPostProcessor, BeanFactoryAware的区别?

微凉
  • 816

在spring中 BeanFactoryPostProcessor获取了 beanFactory 后能够对BeanDefinition进行修改,为什么 BeanFactoryAware 获取的beanfactory 对属性的修改不生效?如果是状态更改导致的?那么是哪个状态呢?记录下这个问题,等看完源码在回头看看问题

回复
阅读 994
1 个回答
✓ 已被采纳

答案是加载顺序的问题,BeanFactoryAware 如果先于 需要过滤的 BeanDefinition 加载,就能够修改,如果位置靠后,实例已经生成,修改直接无效,所以不适合,但并不是不行,可以删除重新注入(不是最佳实践而已)。BeanFactoryPostProcessor 属于 ApplicationContext 优先加载的bean 所以在获取的时候先于普通Bean,对普通 bean 能够方便操作,而对BeanFactoryAware 确没有支持。BeanFactoryAware 的功能仅限于AbstractAutowireCapableBeanFactoryBeanWraper 生成之后判断下,如果是,调用下而已,不能做什么保证。

你知道吗?

宣传栏