Spring Bean后处理器

Spring提供了两类后处理器

1.Bean后处理器

2.容器后处理器

Spring的很多功能就是通过这些后处理来提供高质量的服务。而程序员只需要简单几部同样可以自定义功能强大的后处理器,今天我们将简述Bean后处理器

一、Bean后处理器

用来加强Spring容器中的bean处理。可以在bean在spring容器中初始化前后对bean进行自定义处理。

1.自定义一个自定义一个bean后处理器:

       public class MyBeanProcessor implements BeanPostProcessor{

@Override

               public Object postProcessAfterInitialization(Object arg0, String arg1) throws BeansException {

System.out.println("bean:"+arg1+" after");

                       return arg0;

}

@Override

               public Object postProcessBeforeInitialization(Object arg0, String arg1) throws BeansException{

System.out.println("bean:"+arg1+" before");

                      return arg0;

}

}

Bean后处理器要求实现接口BeanPostProcessor

该接口要求实现的两个方法下载

Object postProcessBeforeInitialization(Object object,String name)

在bean初始化前Spring将回调该方法

参数:object 被后处理的bean

name 被后处理bean的id

返回:被处理后的bean

Object postProcessAfterInitialization(Object object,String name)

在bean初始化后Spring将回调该方法

参数:object 被后处理的bean

name 被后处理bean的id

返回:被处理后的bean

2.注册bean后处理器到容器

<!-- bean 后处理bean -->

<bean class="cn.zhaoyuening.utils.MyBeanProcessor"></bean>

Spring在初始化bean过程中如果发现bean实现了BeanPostProcessor 接口,将会将其注册为bean后处理器,它对spring容器下的所有bean起作用,任何bean在 初始化过程都会通过bean后处理器做额外增强操作。

3.后处理器在Bean初始化过程中调用的时机

4.接下来我们做一个小demo下载

创造一个Persion Bean:

public class Persion{

        private String name;

        private int age;

        private char gender;

        public void work(){

System.out.println(name+"working...");

}

        public void init(){

System.out.println("persion bean 被初始化");

}

//省略若干get&set 方法

}

注册:

//声明初始化方法为init,在初始化进程始将被调用

<bean id="persion" class="cn.zhaoyuening.model.Persion" init-method="init"></bean>

创造Bean后处理器:

      注册后Bean处理器:下载

<!-- bean 后处理bean -->

<bean class="cn.zhaoyuening.utils.MyBeanProcessor"></bean>

在此没有为后处理bean设置id值,因为当spring自动装载所有bean时发现某个bean 实现了BeanPostProcessor 接口将自动注册为后处理bean。

但如果不自动装载bean如使用(BeanFactory)需要设置id值,并手动注册:

<bean class="cn.zhaoyuening.utils.MyBeanProcessor" id=”processor”></bean>

BeanPostProcessor processor = (BeanPostProcessor)baenFactory.getBean(“processor”);

beanFactory.addBeanPostProcessor(processor);

       执行:

private ApplicationContext beansContext = new ClassPathXmlApplicationContext("applicationContext.xml");

@Test

       public void test() throws Exception {

Persion persion = beansContext.getBean("persion",Persion.class);

persion.work();

}

       结果:

bean:persion before #执行bean后处理器的postProcessBeforeInitialization方法

persion bean 被初始化 #Bean 初始化

bean:persion after  #执行bean后处理器的postProcessAfterInitialization方法

#执行persion bean的初始化方法,后处理器中设置name为了buynow

buynow working...

时间: 2024-10-13 16:24:21

Spring Bean后处理器的相关文章

Spring Bean后处理器以及容器后处理器【转】

Bean后处理器:即当spring容器实例化Bean实例之后进行的增强处理. 容器后处理器:对容器本身进行处理,并总是在容器实例化其他任何Bean之前读取配置文件的元数据并可能修改这些数据. 一.Bean后处理器 实现了BeanPostProcessor接口的类即可作为一个Bean后处理器,以下是一个Bean后处理器的范例 1.编写一个实现了BeanPostProcessor接口的MyBeanPostProcessor类 [java] view plain copy package org.me

8 -- 深入使用Spring -- 1...2 Bean后处理器的用处

8.1.2 Bean后处理器的用处 Spring提供的两个常用的后处理器: ⊙ BeanNameAutoProxyCreator : 根据Bean实例的name属性,创建Bean实例的代理. ⊙ DefaultAdvisorAutoProxyCreator : 根据提供的Advisor,对容器中的所有Bean实例创建代理. 这两个Bean后处理器都用于根据容器中配置的拦截器,创建代理Bean.

Spring声明式事务配置的两种策略SpringAop和Bean后处理器的代理BeanNameAutoProxyCreator

Spring的事务配置有两种:1编程式事务管理配置:2声明式事务管理配置.下面介绍两种声明式事务的配置,声明式事务相比于编程式事务代码耦合更低,无序书写任何事务管理的先关代码.两种声明式事务配置策略分别是:SpringAop事务管理和Bean后处理器的代理BeanNameAutoProxyCreator管理事务. 1.SpringAop事务管理配置 1.1.配置数据源: <bean id="pycDataSource" class="com.mchange.v2.c3p

半夜思考之查漏补缺, Spring 的 Bean 后处理器

有一篇写的是容器后处理器, 这篇是 Bean 后处理器 , 我对这个 Bean 后处理器的理解就是一个 AOP 编程 . Bean 后处理器 : 是一种特殊的 Bean , 这种 Bean 不对外提供服务 , 可以不需要 id 属性, 主要负责对容器中的其他Bean 执行后处理 , 例如为容器中的目标 Bean 生成代理等 . Spring 容器中提供两个常用的 Bean 后处理器 : BeanNameAutoProxyCreator : 根据 Bean 实例的 name 属性 ,创建 Bean

Spring.net 后处理器 可用来切换实例

1.xml配置 <!--我们在Object.xml文件上将HexuObjectPostProcessor注册到上下文对象中去--> <object id="hexu" type="CnblogLesson_4_7.Model.Person,HRABLL" init-method="Init" destroy-method="Destroy"/> <object type="CnblogL

半夜思考之查漏补缺, Spring 中的容器后处理器

之前学 Spring 的时候 , 还没听过容器后处理器 , 但是一旦写出来 , 就会觉得似曾相识 . 容器配置器通常用于对 Spring 容器进行处理 , 并且总是在容器实例化任何其他 Bean 之前 , 读取配置文件中的元数据 , 并有可能修改这些数据 . Spring 提供了如下几个常用的容器后处理器 : PropertyPlaceholderConfigurer : 属性占位符配置器 PropertyOverrideConfigurer : 重写占位符配置器 CustomAutowireC

Spring笔记——10.两种后处理器

我们可以通过Bean后处理器跟容器后处理器来拓展Ioc容器.前者能增强bean的功能,后者能增强容器功能. Bean后处理器 这是一种特殊的bean,不对外提供服务,也无需id属性,只负责对其它的正常bean执行后处理,比如为容器中的bean生成代理等.它会在正常bean创建后被创建,必须实现BeanPostProcessor接口.里面的两个方法会在目标bean初始化之前之后被调用. 使用ApplicationContext作为容器的话,架构会自动扫描哪个是bean后处理器.它对每个正常bean

在Spring Bean的生命周期中各方法的执行顺序

Spring 容器中的 Bean 是有生命周期的,Spring 允许在 Bean 在初始化完成后以及 Bean 销毁前执行特定的操作,常用的设定方式有以下十种: 通过实现 InitializingBean 接口来定制初始化之后的操作方法: 通过实现DisposableBean 接口来定制销毁之前的操作方法: 通过元素的 init-method属性指定初始化之后调用的操作方法: 通过元素的 destroy-method属性指定销毁之前调用的操作方法: 在指定方法上加上 @PostConstruct

spring-两种后处理器

1.扩展IoC容器使用后处理器扩展 bean后处理器:对容器中的bean进行后处理,也就是额外的加强. 容器后处理:对IoC容器进行后处理,增强容器功能. 2.bean后处理器      负责处理容器中的所有bean. bean后处理器必须实现BeanPostProcessor接口,提供非方法有: Object postProcessBeforeInitialization(Object bean,String name)throws BenasException:该方法第一个参数是系统即将进行