BeanFactoryPostProcessor 作用(举例)
1、BeanFactoryPostProcessor 作用
作用之一: 解析 xml 引入的资源配置文件里的值
看下两个配置文件就可以明白了
1、资源配置文件
2、spring xml配置文件
接下来跟着源码论证一下:
刚开始生成的这个 BeanDefinition ,它里面的引入的一些 properties 类型的值还只是一个普通字符串,如下图
上述提到的刚开始,也就是当代码执行到下图所示(注意 : obtainFreshBeanFactory 就是根据 xml 文件生成 BeanDefinition 并放入 BeanFactory 中)
生成的bean(按规定这里常说的 bean 就是指 BeanDefinition ) ,放到了 beanFactory 里的 beanDefinitionMap 如下图所示
这个beanDefinitionMap 就是以自己在配置文件指定的id为key,以BeanDefinition对象为值的 concurrentHashMap
接下来继续看 如下图所示,在执行 invokeBeanFactoryPostProcessors 之后,此时的 property 配置的值已经被解析出来了
再往里追 大致流程如下
注意
String[] postProcessorNames = beanFactory.getBeanNamesForType(BeanFactoryPostProcessor.class, true, false);
这句代码就是根据类型获取到 beanDefinitionMap 里的key,这里得到了:org.springframework.context.support.PropertySourcesPlaceholderConfigurer#0( 相当于我们 xml 文件配置的 bean 里的 id 属性);
可以确定它其实就是一个 BeanFactoryPostProcessor ,它 spring 自动添加的一个类,上面那个图片可以清晰看到
现在进入invokeBeanFactoryPostProcessors(调用BeanFactory后处理器),这不就是我们要论证的主题:beanfacotryprocesser 作用 继续跟进,继续看图
自己可以跟进去看:看下核心
总之自己跟着代码走吧... 太深了 哈哈
最后的最后 取出来了:
大佬们多多指教!
看源码着实痛苦,而且不知道自己能不能看懂,也不知道自己天天看的是啥,反正慢慢看呗!总有一天会懂吧