Spring提供了兩次機會,可以切入到Bean的生命周期中, 檢查或者修改它的配置,這叫做后處理。后處理是在Bean實例化以及裝配完成之后發(fā)生的。在Bean被創(chuàng)建以及裝配之后,BeanPostProcessor接口為你提供了兩次機會來修改這個Bean。
public interface BeanPostProcessor {
Object postProcessBeforeInitialization(Object bean, String beanName) throws
BeansException;
Object postProcessAfterInitialization(Object bean, String beanName) throws
BeansException;
}
代碼示例
public class Monkey implements BeanPostProcessor {
public Object postProcessAfterInitialization(Object bean, String name)
throws BeansException {
System.out.println("BeanPostProcessor.postProcessAfterInitialization 正在預(yù)處理!");

if(bean instanceof MonkeyFriends){
MonkeyFriends mf = (MonkeyFriends)bean;
mf.setName1("唐僧");
mf.setName2("豬八戒");
mf.setName3("沙僧");
return bean;
}
return bean;
}
public Object postProcessBeforeInitialization(Object bean, String name)
throws BeansException {
System.out.println("BeanPostProcessor.postProcessBeforeInitialization 正在預(yù)處理!");

return bean;
}
MonkeyFriends類代碼
public class MonkeyFriends {
String name1;
String name2;
String name3;

public String getNames() {
return "Monkey's friends:"+this.name1+""+this.name2+""+this.name3;

…….省略getter、setter方法

}
applicationContext.xml中的配置:
monkeyfriends中name1、name2、name3中的值可以任意寫
<bean id="monkey" class="com.spring.IoC.Monkey" autowire="autodetect">

<!-- <constructor-arg ref="goldencudgel"/> -->
<property name="name">
<value>I'm Sun WuKong!!!!</value>
</property>
<!-- <property name="goldencudgel">
<ref local="goldencudgel"/>
</property>
-->
</bean>
<bean id="monkeyfriends" class="com.spring.IoC.MonkeyFriends">
<property name="name1">
<value>null</value>
</property>
<property name="name2">
<value>null</value>
</property>
<property name="name3">
<value>null</value>
</property>
</bean>

<bean id="goldencudgel" class="com.spring.IoC.Goldencudgel"/>
代碼測試:
public class MainTest {
public static void main(String[] args) {
ApplicationContext ac =
new ClassPathXmlApplicationContext("applicationContext-*.xml");

MonkeyFriends mf = (MonkeyFriends)ac.getBean("monkeyfriends");
System.out.println(mf.getNames());

// monkey.Say();
// monkey.useGoldencudgel();
}
}

運行結(jié)果:
BeanPostProcessor.postProcessBeforeInitialization 正在預(yù)處理!
BeanPostProcessor.postProcessAfterInitialization 正在預(yù)處理!
Monkey's friends:唐僧豬八戒沙僧









































monkeyfriends中name1、name2、name3中的值可以任意寫


























代碼測試:





















-- 學(xué)海無涯