在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 {
@Override
public 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;
}
@Override
public 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
我们是小李23
have 2 students
我们是小王25