使用spring的特殊bean --- 对bean进行后处理和对bean工厂进行后处理简单了解
2012-04-18 15:33
543 查看
使用spring的特殊bean --- 对bean进行后处理和对bean工厂进行后处理简单了解 1.对bean进行后处理 后处理是在bean实例化以及装配完成之后发生的,在bean被创建以及装配之后,BeanPostProcessor提供了两次修改bean的机会,来对bean进行后处理操作。 程序清单 :我们来创建一个类来继承BeanPostProcessor接口来测试: public class PersonServiceBean implements BeanPostProcessor, BeanFactoryPostProcessor { public PersonServiceBean() { super(); System.out.println("构造函数的执行============"); } // 初始化bean after之后的操作 @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { // 传过来的beanName,也就是id是不可以改的 // 通过bean的类型处理 if (bean instanceof PersonServiceBean) { System.out.println("=====在被创建之后装配之后处理操作最后一次修改==========after" + bean + "========" + beanName); } return bean; } // 初始化bean之前 @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { // TODO Auto-generated method stub // 处理bean之前完成的一些操作 if (bean instanceof PersonServiceBean) { System.out.println("========在被创建之后装配之后处理操作第一次修改=======before" + bean + "========" + beanName); } return bean; } } 我们在xml中的配置如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd" default-lazy-init="true"> <!-- default-lazy-init="true" 使用的时候在初始化 --> <!-- 配置一个bean实例,bean的创建配置及维护都交给了容器管理 --> <!-- 如果是默认的单列,执行一次,在容器初始化的时候执行 prototype 每次请求都触发一次 ,在调用后处理方法的时候要用他,因为它是在每次发送请求都会执行一次 --> <bean id="personServiceBean" class="cn.csdn.hr.service.PersonServiceBean" scope="prototype"></bean> </beans> 测试: public void test() { //读取配置文件,创建一次 初始化的时候会执行一次构造方法,在调用getBean的时候会再次执行构造方法 ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"anbeans.xml"}); PersonServiceBean personServiceBean = (PersonServiceBean) ac.getBean("personServiceBean"); } 通过以上的代码可以看出实现了两个方法,分别为:postProcessAfterInitialization和postProcessBeforeInitialization,在xml中没有scope="prototype"的情况下, 只会调用无参构造,如果加上此属性,才可以把自己写的bean后处理的类中实例的方法写出来。 default-lazy-init="true" 在使用的时候再初始化 输出的结果为: 构造函数的执行============ 2012-4-18 4:52:57 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@9f671b: defining beans [personServiceBean]; root of factory hierarchy 构造函数的执行============ ========在被创建之后装配之后处理操作第一次修改=======beforecn.csdn.hr.service.PersonServiceBean@73a7ab========personServiceBean =====在被创建之后装配之后处理操作最后一次修改==========aftercn.csdn.hr.service.PersonServiceBean@73a7ab========personServiceBean 2.对bean工厂进行后处理 对bean工厂进行操作的是BeanFactoryPostProcessor,它是在bean工厂载入所有的bean的定义后,并且在实例化bean之前,对bean的工厂做一些后处理操作 程序清单: StudentServiceBean.java public class StudentServiceBean implements BeanFactoryPostProcessor{ @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory arg0) throws BeansException { System.out.println("处理操作================"); } } 我们要在xml中进行配置: <bean id="studentServiceBean" class="cn.csdn.hr.service.StudentServiceBean"></bean> 这样,当我们再次运行的时候看到的结果为: 处理操作================ 构造函数的执行============ 2012-4-18 4:59:15 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@9f671b: defining beans [personServiceBean,studentServiceBean]; root of factory hierarchy 构造函数的执行============ ========在被创建之后装配之后处理操作第一次修改=======beforecn.csdn.hr.service.PersonServiceBean@1c86be5========personServiceBean =====在被创建之后装配之后处理操作最后一次修改==========aftercn.csdn.hr.service.PersonServiceBean@1c86be5========personServiceBean 可以看出BeanFactoryPostProcessor的执行的位置是在初始化之前
相关文章推荐
- spring boot / cloud (七) 使用@Retryable来进行重处理
- spring3 混合使用 XML 与注解(Annotation)进行 Bean 的配置
- 使用gulp相关插件进行api的跨域访问并监控文件的变化的简单处理
- 使用numpy和PIL进行简单的图像处理方法
- spring使用编程的方式进行事物处理_普通方式和jdbctemplate方式
- 使用spring的特殊bean --- 分散配置
- 使用Spring实现异常统一处理【四】--error-page中对异常进行log
- asp.net- ajax简单入门使用方法,通过一般处理程序ashx进行处理
- Spring使用静态工厂方法创建Bean(一)
- C++使用try&catch进行异常处理的简单范例
- 使用XPath解析xml实现简单的Spring IOC完成bean的依赖注入
- 使用Spring中的ExceptionHandlerExceptionResolver进行统一的异常处理
- 一只简单的网络爬虫(基于linux C/C++)————Url处理以及使用libevent进行DNS解析
- 4000 Spring中用ApplicationContext进行测试的简单使用
- 使用Ado.Net进行简单事务处理的四种实现及比较
- spring3 混合使用 XML 与注解(Annotation)进行 Bean 的配置
- Spring后处理bean使用
- 使用activemq-spring进行消息处理
- Spring-简单bean的配置(使用bean.xml手动完成)
- 如何在 ejs 模板中使用 helper function 外部函数进行特殊处理?