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

在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



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值