spring中Bean后置处理器实现总结
BeanPostProcessor接口 bean的后置处理器
实现功能主要是 可以在bean初始化之前和之后做增强处理。
自定义MyBeanProcessor实现BeanPostProcessor接口,重写里面的postProcessBeforeInitialization和postProcessAfterInitialization方法,这里两个方法的主要是用来bean初始化(init方法)之前和之后做增强处理。
| /** * @author liujian * @date 2018/1/9 */ public class MyBeanProcessor implements BeanPostProcessor{ @Override public Object postProcessBeforeInitialization(Object o, String s) throws BeansException { System.out.println("初始化之前做处理"); //bean初始化之前做处理的方法 if(s.equals("test")){ HelloWorld helloWorld=(HelloWorld)o; helloWorld.setMessage("helloworld 处理后"); return helloWorld; } return o; } @Override public Object postProcessAfterInitialization(Object o, String s) throws BeansException { System.out.println("初始化之后做处理"); return o; } } |
将自定义的MyBeanProcessor 添加到spring 容器中
<bean id="myBeanProcessor" class="com.spring.demo.MyBeanProcessor">
自定义一个实体类HelloWorld,并添加到spring容器中
| /** * @author liujian * @date 2018/1/8 */ public class HelloWorld { private String message; public void getMessage(){ System.out.println("message is "+message); } public void setMessage(String message){ this.message=message; } public HelloWorld() { } //初始化方法 public void init(){ System.out.println("bean 初始化方法"); } //销毁方法 public void destory(){ System.out.println("bean 销毁方法"); } } |
bean.xml文件中 配置helloworld的bean
| <?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.xsd"> <!--通过构造器方法创建bean,定义初始化方法initmethod 和销毁方法--> <bean id="test" class="com.spring.demo.HelloWorld" init-method="init" destroy-method="destory"> <property name="message" value="hello world 1111"></property> </bean> <!--自定义bean的后置处理器--> <bean class="com.spring.demo.MyBeanProcessor"/> </beans> |
测试工具类:
| /** * @author liujian * @date 2018/1/8 */ public class MainApp { public static void main(String []args){ /* ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml"); HelloWorld obj=(HelloWorld) context.getBean("helloWorld"); obj.getMessage(); XmlBeanFactory xmlBeanFactory=new XmlBeanFactory(new ClassPathResource("beans.xml")); HelloWorld obj1=(HelloWorld) xmlBeanFactory.getBean("helloWorld"); obj1.getMessage();*/ AbstractApplicationContext context=new ClassPathXmlApplicationContext("beans.xml"); HelloWorld objA=(HelloWorld) context.getBean("test"); objA.getMessage(); context.registerShutdownHook(); } } |
输出结果:
|
spring中Bean后置处理器实现总结的更多相关文章
- Spring点滴五:Spring中的后置处理器BeanPostProcessor讲解
BeanPostProcessor接口作用: 如果我们想在Spring容器中完成bean实例化.配置以及其他初始化方法前后要添加一些自己逻辑处理.我们需要定义一个或多个BeanPostProcesso ...
- spring学习四:Spring中的后置处理器BeanPostProcessor
BeanPostProcessor接口作用: 如果我们想在Spring容器中完成bean实例化.配置以及其他初始化方法前后要添加一些自己逻辑处理.我们需要定义一个或多个BeanPostProcesso ...
- Spring中的后置处理器BeanPostProcessor讲解
Spring中提供了很多PostProcessor供开发者进行拓展,例如:BeanPostProcessor.BeanFactoryPostProcessor.BeanValidationPostPr ...
- [原创]java WEB学习笔记101:Spring学习---Spring Bean配置:IOC容器中bean的声明周期,Bean 后置处理器
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring Bean后置处理器
本例子源于:W3CSchool,在此作记录 Bean 后置处理器允许在调用初始化方法前后对 Bean 进行额外的处理. BeanPostProcessor 接口定义回调方法,你可以实现该方法来提供自己 ...
- Spring Bean 后置处理器
Bean 后置处理器允许在调用初始化方法前后对 Bean 进行额外的处理. BeanPostProcessor 接口定义回调方法,你可以实现该方法来提供自己的实例化逻辑,依赖解析逻辑等. 你也可以在 ...
- Spring之BeanPostProcessor(后置处理器)介绍
为了弄清楚Spring框架,我们需要分别弄清楚相关核心接口的作用,本文来介绍下BeanPostProcessor接口 BeanPostProcessor 该接口我们也叫后置处理器,作用是在Be ...
- Spring 如何保证后置处理器的执行顺序 - OrderComparator
Spring 如何保证后置处理器的执行顺序 - OrderComparator Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.htm ...
- Spring-Spring Bean后置处理器
Spring Bean后置处理器 BeanPostProcessor接口定义回调方法,你可以实现该方法来提供自己的实例化逻辑,依赖解析逻辑等.你也可以在Spring容器通过插入一个或多个BeanPos ...
随机推荐
- HDU 4556 Stern-Brocot Tree
题意:求SB树第N层分母分子小于均等于N的数有多少? 搞清楚了SB Tree的性质,这道题就很容易了.因为SB Tree中的数均为最简分数,所以筛一波欧拉函数即可. #include<bits/ ...
- AspNet Core Api Restful 实现微服务之旅 (一)
(一)了解微服务(二)搭建VS项目框架 (三)创建AspNet Core Api VS2017 安装包 链接:https://pan.baidu.com/s/1hsjGuJq 密码:ug59 创 ...
- js模拟静态方法
//模拟静态 var Animal = function(name){ this.name = name; Animal.instanceCounter ++; }; Animal.instanceC ...
- UVA 10465 Homer Simpson(全然背包: 二维目标条件)
UVA 10465 Homer Simpson(全然背包: 二维目标条件) http://uva.onlinejudge.org/index.php? option=com_onlinejudge&a ...
- 有关JS控制时间的几个小Demo
一.Document自带的定时和延时方法: 循环运行:var timeid = window.setInterval("方法名或方法"."延时");windo ...
- NHibernate3剖析:Configuration篇之SessionFactory lambda配置
概览 在NHibernate3.0中.SessionFactory的Properties和Cache配置实现了流配置(fluent-configuration)和lambda表达式配置(lambda- ...
- 你为什么还坚持.NET
C#换什么比较合适? 从TIOBE来看,Java.C++.C.Python都好,对了,还不能忘了JS. Sql Server换什么比较合适? MySql挺好,Oracle也不错,也还有不少选择. 都挺 ...
- 阿里云ECS部署ZooKeeper注意事项
如果ECS为专有网络+弹性IP时,配置集群中,"自己"的ip要写成0.0.0.0,其他服务器可以写成公网ip.否则会包如下错误: java.net.BindException: C ...
- 理解Object.defineProperty()
理解Object.defineProperty() Object.defineProperty() 方法直接在一个对象上定义一个新属性,或者修改一个已经存在的属性, 并返回这个对象. 基本语法:Obj ...
- 55、js对象
在python中我们学习了面向对象,javascript也是一门面向对象语言,在JavaScript中除了null和undefined以外其他的数据类型都被定义成了对象. JavaScript的对象简 ...