Spring基础14——Bean的生命周期
1.IOC容器中的Bean的生命周期方法
SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务。SpringIOC容器对Bean的生命周期进行管理的过程:
1)通过构造器或工厂方法创建Bean实例
2)为bean的属性设置值和对其他bean的引用
3)调用Bean的初始化方法
4)Bean可以使用了
5)当容器关闭时,调用Bean的销毁方法
2.验证bean的生命周期
我们可以在Spring的配置文件中声明init-method属性和destory-method属性为Bean指定初始化和销毁方法。
首先我们先创建一个Car类:
public class Car {
public Car() {
System.out.println("Car's Constructor");
}
private String brand;
public void setBrand(String brand) {
System.out.println("setBrand...");
this.brand = brand;
}
//初始化方法
public void init() {
System.out.println("init....");
}
//销毁方法
public void destory() {
System.out.println("destory.....");
}
@Override
public String toString() {
return "Car{" +
"brand='" + brand + '\'' +
'}';
}
}
Spring配置文件
<bean id="car" class="com.wzy.cycle.Car" init-method="init" destroy-method="destory">
<property name="brand" value="Audi"/>
</bean>
编写一个测试类对id为car的bean进行获取
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("beans-cycle.xml");
Car car = (Car) ctx.getBean("car");
System.out.println(car);
ctx.close();
}
}
输出结果:

3.创建Bean后置处理器
Bean后置处理器允许在调用初始化方法前后对Bean进行额外的处理。Bean后置处理器对IOC容器里所有Bean实例逐一处理,而非单一实例。其典型的应用就是:检查Bean属性的正确性或根据特定的标准更改bean的属性。对Bean后置处理器而言,需要实现BeanPostProcessor接口,在初始化方法被调用前后,Spring将每个Bean实例分别传递给上述接口的以下两个方法。
在BeanPostProcessor接口中包含两个方法,postProcessBeforeInitialization()和postProcessAfterInitialization():
1)postProcessBeforeInitialization(Object bean, String beanName):init-method之前被调用
2)postProcessAfterInitialization(Object bean, String beanName):init-method之后被调用
创建Bean后置处理器,首先先创建一个类并实现BeanPostProcessor接口,并实现上面两个方法:
public class MyBeanPostProcessor implements BeanPostProcessor{
@Nullable
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization " + bean + ", " + beanName);
if ("car".equals(beanName)) {
//do sth
}
return bean;
}
@Nullable
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization " + bean + ", " + beanName);
Car car = new Car();
car.setBrand("FuTe");
return car;
}
}
在spring.xml配置bean后置处理器:
<!--实现BeanProcessor接口,并具体提供
postProcessBeforeInitialization(Object bean, String beanName):init-method之前被调用
postProcessAfterInitialization(Object bean, String beanName):init-method之后被调用
的实现
bean:bean本身
beanName:IOC容器配置的bean的名字
返回值:是实际上返回给用户的那个bean,注意:可以在以上两个方法中修改返回的bean,甚至甚至返回一个新的bean
-->
<!--配置bean的后置处理器:不需要配置id,IOC容器会自动识别是一个BeanPostProcessor-->
<bean id="myBeanPostProcessor" class="com.wzy.cycle.MyBeanPostProcessor"/>
再次运行测试类,查看输出结果:

4.添加Bean的后置处理器后Bean的生命周期
1)通过构造器或工厂方法创建bean实例
2)为bean的属性设置值和对其他bean的引用
3)将Bean实例传递给Bean后置处理器
4)执行postProcessBeforeInitialization方法
5)调用bean的init方法
6)将Bean实例传递给Bean后置处理器
7)执行postProcessAfterInitialization方法
8)bean可以使用了
9)当容器关闭了调用bean销毁方法
Spring基础14——Bean的生命周期的更多相关文章
- (转)Spring管理的Bean的生命周期
http://blog.csdn.net/yerenyuan_pku/article/details/52834011 bean的初始化时机 前面讲解了Spring容器管理的bean的作用域.接着我们 ...
- Spring 容器中 Bean 的生命周期
Spring 容器中 Bean 的生命周期 1. init-method 和 destory-method 方法 Spring 初始化 bean 或销毁 bean 时,有时需要作一些处理工作,因此 s ...
- (spring-第1回【IoC基础篇】)Spring容器中Bean的生命周期
日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也有属于它的生命周期. 人类大脑对图像的认知能力永远高于文字,因此 ...
- IoC基础篇(一)--- Spring容器中Bean的生命周期
日出日落,春去秋来,花随流水,北雁南飞,世间万物皆有生死轮回.从调用XML中的Bean配置信息,到应用到具体实例中,再到销毁,Bean也有属于它的生命周期. 人类大脑对图像的认知能力永远高于文字,因此 ...
- Spring 学习笔记---Bean的生命周期
生命周期图解 由于Bean的生命周期经历的阶段比较多,我们将通过一个图形化的方式进行描述.下图描述了BeanFactory中Bean生命周期的完整过程: Bean 的生命周期从Spring容器着手实例 ...
- Spring容器中bean的生命周期以及关注spring bean对象的后置处理器:BeanPostProcessor(一个接口)
Spring IOC 容器对 Bean 的生命周期进行管理的过程: 1.通过构造器或工厂方法创建 Bean 实例 2.为 Bean 的属性设置值和对其他 Bean 的引用 3.将 Bean 实例传递给 ...
- Spring实战(二)Spring容器和bean的生命周期
引入问题: 在XML配置文件中配置bean后,这些文件又是如何被加载的?它们被加载到哪里去了? Spring容器——框架核心 1.什么是Spring容器?它的功能是什么? 在基于Spring的应用中, ...
- spring(二):bean的生命周期
bean的生命周期指的是bean的创建——>初始化——>销毁的过程,该过程是由spring容器进行管理的 我们可以自定义bean初始化和销毁的方法:容器在bean进行到当前生命周期时,调用 ...
- spring框架中Bean的生命周期
一.Bean 的完整生命周期 在传统的Java应用中,bean的生命周期很简单,使用Java关键字 new 进行Bean 的实例化,然后该Bean 就能够使用了.一旦bean不再被使用,则由Java自 ...
随机推荐
- Burpsuiet爆破
burpsuite中intruder标签内attack type四种类型的用法和区别 2016年07月24日 18:13:26 xss_01 阅读数:9802更多 个人分类: burpsuite网络安 ...
- CodeChef-----February Challenge 2018---Broken Clock(极坐标+三角函数递推+矩阵快速幂)
链接: https://www.codechef.com/FEB18/problems/BROCLK Broken Clock Problem Code: BROCLK Chef has a clo ...
- STOMP协议详解
STOMP协议详解 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.STOMP协议介绍 STOMP即Simple (or Streaming) T ...
- WOSA XFS 官方文档地址
WOSA XFS 官方文档地址: ftp://ftp.cencenelec.eu/CWA/CEN/WS-XFS/
- spir 合并单元格
TableRow row = table2.AddRow(); var cell = row.AddCell(); var par = cell.AddParagraph(); par.Text = ...
- Octavia 的 HTTPS 与自建、签发 CA 证书
目录 文章目录 目录 Octavia 为什么需要自建 CA 证书? GenerateServerPEMTask CertComputeCreate Amphora Agent AmphoraAPICl ...
- Quaternions 四元数
四元数是一个乱七八糟得到东西还没搞懂搞懂后再补 先添加unity API transform.rotation 是Quaternionlei类并非Vector3向量 不能进行直接转化 那如何将Vect ...
- golang error (slice of unaddressable value)
使用 Golang 将生成的 md5 转化为 string 的过程出现如下编译错误: 错误解析: 值得注意的一点是 func Sum(data []byte) [Size]byte 这个函数返回的 ...
- SHELL输出颜色和闪烁控制
Shell 颜色和闪烁控制 在Shell下有时候需要定制输出,比如给输出加上颜色,或者显示高亮,或者添加闪烁等. 然后这些颜色代码或者控制码等相对不好记住.这个时候我们可以考虑把最终想要的结果制定成对 ...
- PHP操作SESSION
说一下在PHP里面怎么简单的操作SESSION 操作SESSION流程 <?php session_start(); //开启session $_SESSION['user']='admin'; ...