今天学习了一下Spring的BeanPostProcessor接口,该接口作用是:如果我们需要在Spring容器完成Bean的实例化,配置和其他的初始化后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProcessor接口的实现。

下面我们来看一个简单的例子:

package com.spring.test.di;

import org.springframework.beans.BeansException;

import org.springframework.beans.factory.config.BeanPostProcessor;

public class BeanPostPrcessorImpl implements BeanPostProcessor {

// Bean 实例化之前进行的处理

public Object postProcessBeforeInitialization(Object bean, String beanName)

throws BeansException {

System.out.println("对象" + beanName + "开始实例化");

return bean;

}

// Bean 实例化之后进行的处理

public Object postProcessAfterInitialization(Object bean, String beanName)

throws BeansException {

System.out.println("对象" + beanName + "实例化完成");

return bean;

}

}

只要将这个BeanPostProcessor接口的实现定义到容器中就可以了,如下所示:

<bean class="com.spring.test.di.BeanPostPrcessorImpl"/>

测试代码如下:

package com.spring.test.di;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

public class TestMain {

/**

@param args

*/

public static void main(String[] args) throws Exception {

// 得到ApplicationContext对象

ApplicationContext ctx = new FileSystemXmlApplicationContext(

"applicationContext.xml");

// 得到Bean

ctx.getBean("logic");

}

}

运行以上测试程序,可以看到控制台打印结果:

对象logic开始实例化

对象logic实例化完成

BeanPostProcessor的作用域是容器级的,它只和所在容器有关。如果你在容器中定义了BeanPostProcessor,它仅仅对此容器中的bean进行后置。它不会对定义在另一个容器中的bean进行任何处理。

注意的一点:

BeanFactoryApplicationContext对待bean后置处理器稍有不同。ApplicationContext会自动检测在配置文件中实现了BeanPostProcessor接口的所有bean,并把它们注册为后置处理器,然后在容器创建bean的适当时候调用它。部署一个后置处理器同部署其他的bean并没有什么区别。而使用BeanFactory实现的时候,bean 后置处理器必须通过下面类似的代码显式地去注册:

BeanPostPrcessorImpl beanPostProcessor = new BeanPostPrcessorImpl();

Resource resource = new FileSystemResource("applicationContext.xml");

ConfigurableBeanFactory factory = new XmlBeanFactory(resource);

factory.addBeanPostProcessor(beanPostProcessor);

factory.getBean("logic");

Spring 的 BeanPostProcessor接口实现相关推荐

  1. Spring BeanPostProcessor接口详细使用

    BeanPostProcessor接口简介 BeanPostProcessor也称为Bean后置处理器,它是Spring中定义的接口,在Spring容器的创建过程中(具体为Bean初始化前后)会回调B ...

  2. Spring系列(八):Spring生命周期中BeanPostProcessor接口用法介绍

    今天给大家介绍BeanPostProcessor接口用法,希望对大家能有所帮助! 1.BeanPostProcessor 概念介绍 BeanPostProcessor接口通常被称为Bean的后置处理器 ...

  3. Spring源码分析之BeanPostProcessor接口和BeanFactoryPostProcessor接口方法不执行原因分析

    首先下面是我的Bean /** Copyright 2002-2017 the original author or authors.** Licensed under the Apache Lice ...

  4. Spring后处理Bean(BeanPostProcessor 接口)Bean增强

    后处理Bean也称之为Bean的后处理器,作用是:在Bean初始化的前后,对Bean对象进行增强.它既可以增强一个指定的Bean,也可以增强所有的Bean,底层很多功能(如AOP等)的实现都是基于它的 ...

  5. Spring中的BeanPostProcessor接口

    由方法名字也可以看出,前者在实例化及依赖注入完成后.在任何初始化代码(比如配置文件中的init-method)调用之前调用:后者在初始化代码调用之后调用. 注意: 1.接口中的两个方法都要将传入的be ...

  6. Spring 之常用接口

    1.ApplicationContextAware 任何期望在ApplicationContext运行的时候被通知到都可以实现该接口 /*** 测试Spring ApplicationContextA ...

  7. Spring8:一些常用的Spring Bean扩展接口

    前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格 ...

  8. 使用BeanPostProcessor接口对受管Bean进行预处理

    有时候,我们希望在Spring IoC容器初始化受管Bean之前.属性设置之后对该Bean先做一些预处理,或者在容器销毁受管Bean之前自己释放资源.那么该如何实现呢?Spring IoC为我们提供了 ...

  9. Spring中BeanPostProcessor

    Spring提供了很多扩展接口,BeanPostProcessor接口和InstantiationAwareBeanPostProcessor接口就是其中两个. BeanPostProcessor B ...

  10. java 扩展接口_详解常用的Spring Bean扩展接口

    前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格 ...

最新文章

  1. Django 全文检索6.3
  2. Linux中的 inode以及 软硬链接分析
  3. 不做CIO 就做首席架构师
  4. 判断个十百千位之后是否大于20 java——CSDN博客
  5. python3里面的图片处理库 pillow
  6. Java全套学习资料
  7. AdminLTE与php,如何使用Vue整合AdminLTE模板
  8. 借贷行业,还有明天吗?
  9. 黑客泄露澳大利亚大量求职者信息,其中包含11家重要公司名单
  10. 触摸屏与usb鼠标同时支持
  11. 猿创征文 | Git的良心教程
  12. 区块链技术及其在信息安全领域的研究进展 简单概括
  13. matlab矩阵生成与编辑方法
  14. 169-路飞10-redis之列表操作通用操作管道操作
  15. Java程序为身份证照片添加马赛克
  16. javascript打印设置页眉页脚
  17. PAT(乙级)1076.Wifi密码(15)
  18. k8s 的etcd备份、CoreDNS和dashboard安装,集群升级,yaml详解
  19. 暗夜精灵6-ubuntu18.04-显卡驱动
  20. Vs Code 终端激活 anconda 环境问题解决措施

热门文章

  1. 阶段3 2.Spring_09.JdbcTemplate的基本使用_1 今日课程内容介绍
  2. 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_01.mybatis课程介绍
  3. nginx负载均衡的5种策略(转载)
  4. oracle数据库使用小结
  5. 在webconfig中写好连接后,在程序中如何调用?
  6. PHP下拉框内容随单选框内容变化
  7. 【原】涉及数据库的单元测试-JTeser
  8. TeamWork#3,Week5,The First Meeting of Our Team
  9. 经常用到的一个分页存储过程
  10. Maxtocode 2.0 试用版发布