Spring 的 BeanPostProcessor接口实现
今天学习了一下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进行任何处理。
注意的一点:
BeanFactory
和ApplicationContext
对待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接口实现相关推荐
- Spring BeanPostProcessor接口详细使用
BeanPostProcessor接口简介 BeanPostProcessor也称为Bean后置处理器,它是Spring中定义的接口,在Spring容器的创建过程中(具体为Bean初始化前后)会回调B ...
- Spring系列(八):Spring生命周期中BeanPostProcessor接口用法介绍
今天给大家介绍BeanPostProcessor接口用法,希望对大家能有所帮助! 1.BeanPostProcessor 概念介绍 BeanPostProcessor接口通常被称为Bean的后置处理器 ...
- Spring源码分析之BeanPostProcessor接口和BeanFactoryPostProcessor接口方法不执行原因分析
首先下面是我的Bean /** Copyright 2002-2017 the original author or authors.** Licensed under the Apache Lice ...
- Spring后处理Bean(BeanPostProcessor 接口)Bean增强
后处理Bean也称之为Bean的后处理器,作用是:在Bean初始化的前后,对Bean对象进行增强.它既可以增强一个指定的Bean,也可以增强所有的Bean,底层很多功能(如AOP等)的实现都是基于它的 ...
- Spring中的BeanPostProcessor接口
由方法名字也可以看出,前者在实例化及依赖注入完成后.在任何初始化代码(比如配置文件中的init-method)调用之前调用:后者在初始化代码调用之后调用. 注意: 1.接口中的两个方法都要将传入的be ...
- Spring 之常用接口
1.ApplicationContextAware 任何期望在ApplicationContext运行的时候被通知到都可以实现该接口 /*** 测试Spring ApplicationContextA ...
- Spring8:一些常用的Spring Bean扩展接口
前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格 ...
- 使用BeanPostProcessor接口对受管Bean进行预处理
有时候,我们希望在Spring IoC容器初始化受管Bean之前.属性设置之后对该Bean先做一些预处理,或者在容器销毁受管Bean之前自己释放资源.那么该如何实现呢?Spring IoC为我们提供了 ...
- Spring中BeanPostProcessor
Spring提供了很多扩展接口,BeanPostProcessor接口和InstantiationAwareBeanPostProcessor接口就是其中两个. BeanPostProcessor B ...
- java 扩展接口_详解常用的Spring Bean扩展接口
前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格 ...
最新文章
- Django 全文检索6.3
- Linux中的 inode以及 软硬链接分析
- 不做CIO 就做首席架构师
- 判断个十百千位之后是否大于20 java——CSDN博客
- python3里面的图片处理库 pillow
- Java全套学习资料
- AdminLTE与php,如何使用Vue整合AdminLTE模板
- 借贷行业,还有明天吗?
- 黑客泄露澳大利亚大量求职者信息,其中包含11家重要公司名单
- 触摸屏与usb鼠标同时支持
- 猿创征文 | Git的良心教程
- 区块链技术及其在信息安全领域的研究进展 简单概括
- matlab矩阵生成与编辑方法
- 169-路飞10-redis之列表操作通用操作管道操作
- Java程序为身份证照片添加马赛克
- javascript打印设置页眉页脚
- PAT(乙级)1076.Wifi密码(15)
- k8s 的etcd备份、CoreDNS和dashboard安装,集群升级,yaml详解
- 暗夜精灵6-ubuntu18.04-显卡驱动
- Vs Code 终端激活 anconda 环境问题解决措施
热门文章
- 阶段3 2.Spring_09.JdbcTemplate的基本使用_1 今日课程内容介绍
- 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_01.mybatis课程介绍
- nginx负载均衡的5种策略(转载)
- oracle数据库使用小结
- 在webconfig中写好连接后,在程序中如何调用?
- PHP下拉框内容随单选框内容变化
- 【原】涉及数据库的单元测试-JTeser
- TeamWork#3,Week5,The First Meeting of Our Team
- 经常用到的一个分页存储过程
- Maxtocode 2.0 试用版发布