BeanPostProcessor 和 BeanFactoryPostProcessor
BeanFactoryPostProcessor 在生命周期在当所有的Bean定义载入以后,实列化Bean之前
BeanFactoryPostProcessor的postProcessBeanFactory方法将被调用,这样我们就可以在加载完所有的配置信息以后对配置信息进行一些修改或整理等等工作。
Spring有一个后好的例子就是PropertyPlaceholderConfigurer这个类,他实现了BeanFactoryPostProcessor接口,这个类的作用就是加载一个外部的properties文件具体配置如下:
<
bean
id
=
"out"
class
=
"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
>
<
property
name
=
"location"
>
<
value
>
com/maomao/xml/dataconfig.properties
</
value
>
</
property
>
</
bean
>
<
bean
id
=
"id"
class
=
"com.maomao.model.Test"
singleton
=
"true"
>
<
property
name
=
"driver"
><
value
>
${config.driver}
</
value
></
property
>
<
property
name
=
"url"
><
value
>
${config.url}
</
value
></
property
>
<
property
name
=
"user"
><
value
>
${config.user}
</
value
></
property
>
<
property
name
=
"password"
><
value
>
${ocnfig.password}
</
value
></
property
>
</
bean
>
dataconfig.properties
文件是
config.driver=
com.mysql.jdbc.Dvriver
config.url=
jdbc
:
mysql://127.0.0.1:3306/itcast
config.user=
root
ocnfig.password=
1
这样当用
上下文工厂类加载完配置信息以后postProcessBeanFactory方法就可以把里面的${} 信息替换成对应的属性文件里的值。
下面我们将将BeanPostProcessor
我看书的时候书上说的一个类实现了BeanPostProcessor接口然后当bean依赖注入完以后就会调用它的2个方法
postProcessAfterInitialization
(Object bean, String beanName) Apply this BeanPostProcessor to the given new bean instance after any bean initialization callbacks (like InitializingBean's afterPropertiesSet or a custom init-method). | |
postProcessBeforeInitialization
(Object bean, String beanName)
|
至于这2个方法的在什么时候被调用我们不具体讲(实现会调用
postProcessBeforeIniialization
,然后会调用
bean
里配置的
init-method
方法,然后再调用
postProcessAfterInitialization
)
,
而依照书上的讲解
BeanPostProcessor
就只对实现了BeanPostProcessor的接口才起作用,其实不是这样的,当你配置一个类,它实现了BeanPostProcessor接口,那么你这个配置文件里的所有类在创建完成以后都回来执行BeanPostProcessor这个实现类的2个方法。这和书上所讲的大不一样。这个就是BeanPostProcessor的生命周期。
注: 对BeanPostProcessor的生命周期本人还不是很了解,有些问题还在实验中。希望知道的大虾回馈意见。