在spring中 BeanFactoryPostProcessor获取了 beanFactory 后能够对BeanDefinition进行修改,为什么 BeanFactoryAware 获取的beanfactory 对属性的修改不生效?如果是状态更改导致的?那么是哪个状态呢?记录下这个问题,等看完源码在回头看看问题
在spring中 BeanFactoryPostProcessor获取了 beanFactory 后能够对BeanDefinition进行修改,为什么 BeanFactoryAware 获取的beanfactory 对属性的修改不生效?如果是状态更改导致的?那么是哪个状态呢?记录下这个问题,等看完源码在回头看看问题
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
答案是加载顺序的问题,
BeanFactoryAware
如果先于 需要过滤的BeanDefinition
加载,就能够修改,如果位置靠后,实例已经生成,修改直接无效,所以不适合,但并不是不行,可以删除重新注入(不是最佳实践而已)。BeanFactoryPostProcessor
属于ApplicationContext
优先加载的bean 所以在获取的时候先于普通Bean,对普通 bean 能够方便操作,而对BeanFactoryAware
确没有支持。BeanFactoryAware
的功能仅限于AbstractAutowireCapableBeanFactory
在BeanWraper
生成之后判断下,如果是,调用下而已,不能做什么保证。