Bean后处理器:即当Spring容器实例化Bean实例之后进行的增强处理。
容器后处理器:对容器本身进行处理,并总是在容器实例化其他任何Bean之前读取配置文件的元数据并可能修改这些数据。
一、Bean后处理器
实现了BeanPostProcessor接口的类即可作为一个Bean后处理器,以下是一个Bean后处理器的范例
1、编写一个实现了BeanPostProcessor接口的MyBeanPostProcessor类
- package org.meify.core;
-
- import org.meify.bean.AuthorBean;
- import org.springframework.beans.BeansException;
- import org.springframework.beans.factory.config.BeanPostProcessor;
-
-
-
-
-
-
-
-
- public class MyBeanPostProcessor implements BeanPostProcessor {
- @Override
- public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
-
- System.out.println(beanName+"初始化之前进行增强处理。。。");
- return bean;
- }
-
- @Override
- public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
-
- System.out.println(beanName+"初始化之后进行增强处理。。。");
-
- if(beanName.equals("author")||bean instanceof AuthorBean){
- AuthorBean author=(AuthorBean) bean;
- author.setAddress("辽宁省大连市");
- }
- return bean;
- }
- }
2、在spring配置文件中注册该Bean后处理器
-
- <bean id="beanProcessor" class="org.meify.core.MyBeanPostProcessor"/>
至此一个Bean后处理器即完成了
二、容器后处理器
同上,容器后处理器实现的是BeanFactoryPostProcessor接口
1、编写实现了BeanFactoryPostProcessor接口的MyBeanFactoryPostProcessor的容器后处理器
- package org.meify.core;
-
- import org.springframework.beans.BeansException;
- import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
- import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
-
-
-
-
-
-
-
-
- public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {
-
- @Override
- public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException {
-
- System.out.println("对容器进行后处理。。。。");
- }
-
- }
2、注册容器后处理器
-
- <bean id="factoryProcessor" class="org.meify.core.MyBeanFactoryPostProcessor"/>
这样一个容器后处理器也完成了
最后编写一个测试程序,对以上的两种后处理器进行测试
- package org.meify.test;
-
-
- import org.meify.bean.AuthorBean;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
-
-
-
-
-
-
-
-
- public class Test01 {
-
- public static void main(String[] args) {
-
- ApplicationContext ctx=new ClassPathXmlApplicationContext("spring-config.xml");
- System.out.println(ctx);
-
-
-
- AuthorBean author=ctx.getBean("author",AuthorBean.class);
-
- System.out.println("author的地址为:===="+author.getAddress());
-
-
-
- }
-
- }
控制台输出如下:
- 2014-1-3 16:33:24 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
- 信息: Loading XML bean definitions from class path resource [spring-config.xml]
- 对容器进行后处理。。。。
- 2014-1-3 16:33:24 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
- 信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@c09554: defining beans [book,author,beanProcessor,factoryProcessor]; root of factory hierarchy
- org.springframework.context.support.ClassPathXmlApplicationContext@1cb25f1: startup date [Fri Jan 03 16:33:24 CST 2014]; root of context hierarchy
- author初始化之后进行增强处理。。。
- 正在执行初始化方法。。。
- author初始化之前进行增强处理。。。
- author的地址为:====辽宁省大连市
所有评论(0)