spring之扩展点

本文深入探讨了Spring框架中的两种扩展点:BeanPostProcessor和BeanFactoryPostProcessor。BeanPostProcessor允许在bean初始化前后进行定制化处理,常用于实现AOP动态代理。而BeanFactoryPostProcessor则在bean实例化之前操作bean的定义,如设置属性值。文中通过示例详细解释了这两个接口的使用方法和执行顺序。
摘要由CSDN通过智能技术生成

上篇文章,介绍了spring中bean的生命周期,并且在文章末尾提到,spring使用BeanPostProcessor接口来处理生命周期的回调。我们可以在初始化函数(init())中定制化一些逻辑。上述BeanPostProcessor就是spring扩展点(extension points)。Spring及其灵活,一般情况下我们并不需要去继承ApplicationContext 去扩展功能,只需要使用spring提供的扩展接口,就可以刻spring无缝集成。

Spring主要提供了两类扩展点BeanPostProcessor和BeanFactoryPostProcessor。前者是操作bean的实例,后者使对bean的元数据定义进行扩展。

BeanPostProcessor

接口说明

BeanPostProcessor提供对bean实例的操作扩展,在spring容器对bean实例化和设置依赖之后,其回调开始执行。BeanPostProcessor接口定义的两个方法,分别在bean的初始化方法(InitializingBean接口,或者init-method定义)执行的前后执行:

public interface BeanPostProcessor{
      /**
       * 在bean的初始化方法执行后执行
       */
      public Object postProcessAfterInitialization(Object arg0, String arg1)
            throws BeansException ;
      /**
       * 在bean的初始化方法执行前执行
       */
      public Object postProcessBeforeInitialization(Object arg0, String arg1)
            throws BeansException ;
        
   }

以上两个方法的参数列表中分别是spring容器创建的对象和beanName,返回值是经过定制化的对象。

BeanPostProcessor对bean实例进行操作,其在bean被实例化和后开始被执行相关回调。它是与容器相关的,它只对其所在容器中的bean有影响,对其父容器没有影响。

BeanPostProcessor也是一个bean,只不过它对其它bean进行后续的扩展处理。Spring容器可以自动的发现实现这个接口的bean。所以如果我们要使我们自定义的BeanPostProcessor起作用,可以像配置其他bean一样在配置文件中进行配置(当然也可以编码实现,向容器注册一个)。Spring容器对BeanPostProcessor类型的bean专门处理,所有的BeanPostProcessor及其引用的依赖在spring容器启动的时候实例化,作为spring容器启动的一个阶段。

Spring容器中内置很多BeanPostProcessor的实现,如上篇文章中使用JSR注解@PostConstruct,对它的处理就是使用BeanPostProcessor。它的另外一哥较常见的作用是spring-aop动态代理。

另外我们可以定义多个BeanPostProcessor,他们执行的顺序可以通过实现Ordered接口来控制。

一个示例

代码说明

这个示例演示有两个点:

1.     BeanPostProcessor的在bean的生命周期中执行时机。

2.     模拟实现一个aop的事务处理代理。

这个示例使用的代码基本上还是上篇文章的代码,增加了一个BeanPostPr

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值