spring 容器中注册BeanPostProccessor来实现JavaBean的预处理和后处理

来源:互联网 发布:数据库系统概论考试 编辑:程序博客网 时间:2024/05/22 12:22

在spring管理javaBean的生命周期的初始化阶段,为了深入到javaBean的初始化阶段实现预处理和后处理,下面给了一个完整的可以运行的例子

1、Person 为接口。

2、Student 为类。

3、ProcessorTest 实现了BeanPostProcessor接口来处理javaBean的初始化信息

package bean;public interface Person {public void say();}

 

 

package bean;import java.util.List;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;public class Student implements Person{private String name;private String info;private int age;private List<String> count; public String getName() {return name;}public void setName(String name) {this.name = name;}public String getInfo() {return info;}public void setInfo(String info) {this.info = info;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void say (){System.out.println("students " +name+" "+age+" : "+info);}public List<String> getCount() {return count;}public void setCount(List<String> count) {this.count = count;}}
package bean;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;public class ProcessorTest implements BeanPostProcessor {@Overridepublic Object postProcessAfterInitialization(Object bean, String arg1)throws BeansException {System.out.println("初始化开始.......");if(bean instanceof Student){Student stu=(Student)bean;if(stu.getAge()==0){stu.setAge(21);}}return bean;}@Overridepublic Object postProcessBeforeInitialization(Object bean, String arg1)throws BeansException {System.out.println("初始化结束.......");return bean;}}
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"  "http://www.springframework.org/dtd/spring-beans-2.0.dtd"><beans><bean id="stuList" class="bean.School"><property name="stuList"><list><ref bean="student1" /><ref bean="student2" /></list></property></bean><bean id="student1" class="bean.Student"><property name="name"><value>小李</value></property><property name="info"><value>我们是小李</value></property><property name="age"><value>23</value></property></bean><bean id="student2" class="bean.Student"><property name="name"><value>小王</value></property><property name="info"><value>我们是小王</value></property><property name="age"><value>25</value></property></bean></beans>
package comMain;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.xml.XmlBeanFactory;import org.springframework.context.ApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;import org.springframework.core.io.ClassPathResource;import org.springframework.core.io.Resource;import bean.Person;import bean.ProcessorTest;import bean.School;public class TestSpringBean {/** * @param args */public static void main(String[] args) {    TestSpringBean test=new TestSpringBean();//test.getInfo();test.getInfo1();}public void getInfo1(){//ApplicationContext ctx=new FileSystemXmlApplicationContext("WebContent/WEB-INF/springXml/Info.xml");Resource resource=new ClassPathResource("/springXml/Info.xml");XmlBeanFactory factory=new XmlBeanFactory(resource);//容器中注册BeanPostProccessor来实现javabean的预处理和后处理ProcessorTest pr=new ProcessorTest();factory.addBeanPostProcessor(pr);School school=(School)factory.getBean("stuList");    school.getInfo();}}

 

运行结果:

 

2013-8-7 10:26:39 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions信息: Loading XML bean definitions from class path resource [springXml/Info.xml]初始化结束.......初始化开始.......初始化结束.......初始化开始.......初始化结束.......初始化开始.......have 2 students我们是小李23have 2 students我们是小王25