Cyh的博客

Email:kissyan4916@163.com
posts - 26, comments - 19, trackbacks - 0, articles - 220

Spring中的后处理

Posted on 2009-02-17 16:28 啥都写点 阅读(358) 评论(1)  编辑  收藏 所属分类: J2EE
    Spring提供了两次机会,可以切入到Bean的生命周期中, 检查或者修改它的配置,这叫做后处理。后处理是在Bean实例化以及装配完成之后发生的。在Bean被创建以及装配之后,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 正在预处理!"); 

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 正在预处理!");  

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();
   }

}


运行结果:
BeanPostProcessor.postProcessBeforeInitialization 正在预处理!
BeanPostProcessor.postProcessAfterInitialization 正在预处理!
Monkey
's friends:唐僧猪八戒沙僧


                                                                                                       --    学海无涯
        

Feedback

# re: Spring中的后处理  回复  更多评论   

2009-06-08 20:20 by siyang
正在学习中支持

只有注册用户登录后才能发表评论。


网站导航: