Spring的Bean的生命周期以及Bean的后置处理器
Bean的生命周期:
Spring IOC 容器可以管理 Bean 的生命周期,
Spring 允许在 Bean 生命周期的特定点执行定制的任务.
Spring IOC 容器对 Bean 的生命周期进行管理的过程:
1通过构造器或工厂方法创建 Bean 实例
2为 Bean 的属性设置值和对其他 Bean 的引用
3调用 Bean 的初始化方法(可以人为指定,利用Bean标签的inti-method属性指定初始化方法,不指定就默认忽略这步骤) Bean 可以使用了
4当容器关闭时, 调用 Bean 的销毁方法(可以人为指定,利用Bean标签的destroy-method属性指定销毁方法,不指定就默认忽略这步骤 )
代码示例:
Bean实例代码:
package com.jeremy.spring.cycle;
public class person {
private String Name;
public void setName(String name) {
Name = name;
System.out.println("Setter............");
}
public person() {
System.out.println("person constructor.......");
}
public void init(){
System.out.println("init......");
}
public void destory(){
System.out.println("desdtory......");
}
@Override
public String toString() {
return "person [Name=" + Name + "]";
}
配置了init-method和destroy-method后
测试代码:
@Test
public void testNoProcessorCycle(){
ConfigurableApplicationContext caContext=new ClassPathXmlApplicationContext("Bean-cycle.xml");
person person=(com.jeremy.spring.cycle.person) caContext.getBean("person");
caContext.close();
}
测试结果:
person constructor.......
Setter............
init......
2014-10-14 19:49:36 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@8965fb: startup date [Tue Oct 14 19:49:35 CST 2014]; root of context hierarchy
desdtory......
证明Bean的声明流程如上所说
1为什么需要Bean的后置处理器(就是用来在容器调用Bean的init()的方法前后进行处理)---一旦IOC配置了Bean的后置处理器是对Bean所在的IOC容器里面所有Bean都是有效的
如果不配置后置处理器,每次IOC容器就直接示例化Bean,但是如果再实际的开发中,我们需要在Bean初始前配置和其他的初始化后添加一些自己的逻辑处理??那怎么办,那这时候就需要用到Bean的后置处理器了
2配置Bean后置处理器的步骤:
1需要新建一个类实现BeanPostProcessor接口,并实现 postProcessAfterInitialization(Object arg0, String arg1), postProcessBeforeInitialization(Object arg0, String arg1)两个方法
arg0:就是传入的Bean对象,
arg1:就是Bean的ID值
返回值:就是返回一个Bean对象,我们也可以认为的修改返回的Bean对象,不一定一定要返回容器初始化的那个Bean对象
代码下:
package com.jeremy.spring.cycle; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor; public class MyBeanPostProcessor implements BeanPostProcessor { public MyBeanPostProcessor() {
// TODO Auto-generated constructor stub
} @Override
public Object postProcessAfterInitialization(Object arg0, String arg1)
throws BeansException {
System.out.println("before init..........."+arg0.getClass());
return arg0;
} @Override
public Object postProcessBeforeInitialization(Object arg0, String arg1)
throws BeansException {
// TODO Auto-generated method stub
System.out.println("after init..........."+arg0.getClass());
return arg0;
} }
2在XML配置文件配置后置处理器,
<!-- 配置 bean 后置处理器: 不需要配置 id 属性, IOC 容器会识别到他是一个 bean 后置处理器, 并调用其方法 -->
<bean class="com.jeremy.spring.cycle.MyBeanPostProcessor"></bean>
3测试代码
@Test
public void testNoProcessorCycle(){
ConfigurableApplicationContext caContext=new ClassPathXmlApplicationContext("Bean-cycle.xml");
person person=(com.jeremy.spring.cycle.person) caContext.getBean("person");
caContext.close();
}
运行结果:
这是具有后置处理器Bean的生命流程流程如下:
person constructor.......
Setter............
before init...........class com.jeremy.spring.cycle.person
init...................
after init...........class com.jeremy.spring.cycle.person
destory.....................
Spring的Bean的生命周期以及Bean的后置处理器的更多相关文章
- spring源码学习(四)-spring生命周期用到的后置处理器
生命周期的九大后置处理器 第一次调用后置处理器org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory# ...
- Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析
Spring Ioc源码分析系列--Ioc容器BeanFactoryPostProcessor后置处理器分析 前言 上一篇文章Spring Ioc源码分析系列--Ioc源码入口分析已经介绍到Ioc容器 ...
- Spring 中 Bean 的生命周期
所谓 Bean 的生命周期,就是一个 Bean 从创建到销毁,所经历的各种方法调用.大致包含下面几个方法(不是全部) Bean 的实例化,调用了构造方法. 使用 setter 方法填充属性. 一旦依赖 ...
- Spring第三天,详解Bean的生命周期,学会后让面试官无话可说!
点击下方链接回顾往期 不要再说不会Spring了!Spring第一天,学会进大厂! Spring第二天,你必须知道容器注册组件的几种方式!学废它吊打面试官! 今天讲解Spring中Bean的生命周期. ...
- spring中的bean的生命周期
bean的生命周期:bean的创建 —— 初始化 ——销毁的过程 容器管理bean的生命周期,我们可以自定义初始化和销毁方法,容器在bean进行到当前生命周期就会调用我们的方法 在xml配置文件中是在 ...
- BeanFactory中Bean的生命周期
Bean的生命周期图解 集体过程如下: 当调用者通过getBean(beanName)向容器请求某一个Bean时,如果容器注册了org.springframework.beans.factory.co ...
- 浅尝Spring注解开发_Bean生命周期及执行过程
Spring注解开发 浅尝Spring注解开发,基于Spring 4.3.12 包含Bean生命周期.自定义初始化方法.Debug BeanPostProcessor执行过程及在Spring底层中的应 ...
- Spring的后置处理器BeanPostProcessor
一.BeanPostProcessor接口的作用 如果我们需要在Spring容器完成Bean的实例化.配置和其他的初始化前后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProce ...
- Spring Bean的生命周期(非常详细)
Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...
随机推荐
- python3的pip管理器pip3
一且因为python2到3的痛苦升级,python3的pip程序也有一个别致的名字pip3 安装: apt-get install python3-pip 安装后不能直接使用pip,否则会提示没有安装 ...
- [na]tcp的可靠性
- Windows Phone 性能优化(一)
在实际的项目开发过程中,应用的性能优化是一个永恒的话题,也是开发者群里最常讨论的话题之一,我在之 前的公司做 wp项目时,也遇到过性能的瓶颈.当页面中加载的内容越来越多时,内存涨幅非常明显(特别是 一 ...
- 第八课:不一样的链表 linux链表设计哲学 5星级教程
这一课最后实现的链表,和普通链表不同,借鉴了linux内核链表的思想,这也是企业使用的链表. 基础介绍: 顺序表的思考 顺序表的最大问题是插入和删除需要移动大量的元素!如何解决?A:在线性表数据元素之 ...
- nyoj16矩形嵌套(第一道dp关于dag的题目)
http://acm.nyist.net/JudgeOnline/problem.php?pid=16 题意:有n个矩形,每个矩形可以用a,b来描述,表示长和宽.矩形X(a,b)可以嵌套在矩形Y(c, ...
- Roslyn介绍
介绍 一般来说,编译器是一个黑箱,源代码从一端进入,然后箱子中发生一些奇妙的变化,最后从另一端出来目标文件或程序集.编译器施展它们的魔法,它们必须对所处理的代码进行深入的理解,不过相关知识不是每个人都 ...
- mysql学习笔记2--mysql的基本使用
4. 运行和关闭MySQL服务器 首先检查MySQL服务器正在运行与否.在资源管理器查看有没有mysqld的进程,如果MySQL正在运行,那么会看到列出来的 mysqld 进程.如果服务器没有运行,那 ...
- PostgreSQL入门指南
默认端口:5432 创建用户与数据库 PostgreSQL初次安装后,默认会生成一个名为postgres的数据库和一个名为postgres的数据库用户.这里需要注意的是,同时还生成了一个名为postg ...
- 理财---炒股之kdj
http://jingyan.baidu.com/article/ac6a9a5ea4e9032b643eac4f.html 28转换: http://zhidao.baidu.com/link?ur ...
- pydoc介绍
Ka-Ping Yee 曾创建了一个相当著名的模块,名叫 pydoc (比较而言: pydoc 可以做到 perldoc 所能做的任何事,并且做得更好.更漂亮:-).对于 Python 2.1 来说, ...