在XML解析文件中,我们经常用到类似如下bean对象的定义:
<bean id=dataSource class=com.alibaba.druid.pool.DruidDataSource>
<property name=“url” value=“${jdbc.url}”></property>
….
</bean>
我们很多人有个疑问,即“${jdbc.url}” 是在哪里被替换的?
PostProcessor 即后置处理增强器,其包括BeanFactoryPostProcessor 和BeanProcessor。
他们多针对的操作对象不同。
Bean Factory:即访问Spring容器的入口。
为什么我们会用ApplicationContext或context获取对象呢? 其实ApplicationContext继承自BeanFactory。
而BeanFactory作为Spring容器的入口,其中的BeanDefinition放在哪里?
我们查看BeanFactoryPostProcessor类,发现其中只有一个方法。
其下有一个方法PlaceholderConfigureSupport,能够完成对占位符(${ })的替换;
因此在最初的BeanDefinition基础上,经过很多个BFPP(BeanFactoryPostProcessor)得到最终的BeanDefinition: