前面分别对PropertyPlaceholderConfigurer和PropertyOverrideConfigurer的使用方法进行了介绍。但是有个问题,不知道大家看到没有?我们在配置文件中只是定义了一个bean,
连id都没有给出。而且这个bean并没有被别的bean所引用。那么,Spring的bean factory是怎么知道要从这个bean中获取信息的呢?
解开源码发现,上面说的两个类,它们都间接的实现了BeanFactoryPostProcessor接口,这个接口很特别,
当 Spring加载任何实现了这个接口的bean的配置时,都会在bean factory载入所有的bean的配置之后,执行 postProcessBeanFactory方法。在PropertyResourceConfigurer类中实现了postProcessBeanFactory方法,在方法中先后调用了 mergeProperties,convertProperties,processProperties这三个方法,分别得到配置,将得到的配置转换为合适的类型,最后将配置内容告知BeanFactory。
正是通过实现BeanFactoryPostProcessor接口,BeanFactory会在实例化任何bean之前获得配置信息,从而能够正确解析bean描述文件中的变量引用。
<bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
<property name="location" value="propertyOverrideHolder.properties"/>
</bean>连id都没有给出。而且这个bean并没有被别的bean所引用。那么,Spring的bean factory是怎么知道要从这个bean中获取信息的呢?
解开源码发现,上面说的两个类,它们都间接的实现了BeanFactoryPostProcessor接口,这个接口很特别,
当 Spring加载任何实现了这个接口的bean的配置时,都会在bean factory载入所有的bean的配置之后,执行 postProcessBeanFactory方法。在PropertyResourceConfigurer类中实现了postProcessBeanFactory方法,在方法中先后调用了 mergeProperties,convertProperties,processProperties这三个方法,分别得到配置,将得到的配置转换为合适的类型,最后将配置内容告知BeanFactory。
正是通过实现BeanFactoryPostProcessor接口,BeanFactory会在实例化任何bean之前获得配置信息,从而能够正确解析bean描述文件中的变量引用。
理解Spring BeanFactory在配置文件中的作用机制
本文深入探讨了Spring中BeanFactory如何在配置文件中获取并处理信息,重点解析了PropertyResourceConfigurer类如何通过实现BeanFactoryPostProcessor接口,在实例化bean前接收并应用配置信息。
173万+

被折叠的 条评论
为什么被折叠?



