管理Bean的生命周期
【IOC容器中Bean的生命周期方法】
1.SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务。
2.Spring IOC容器对Bean的生命周期进行管理的过程:
--通过构造器或工厂方法创建Bean实例
--为Bean的属性设置值和对其他Bean的引用
--调用Bean的初始化方法
--Bean可以使用了
--当容器关闭时,调用Bean的销毁方法
3.在Bean的声明里设置init-method和destroy-method属性,为Bean指定初始化和销毁方法。
【示例】
beans-cycle.xml:
<?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 id="car" class="com.hk.beans.cycle.Car"
init-method="init"
destroy-method="destroy">
<property name="brand" value="Audi"></property>
</bean>
</beans>
/spring-1/src/com/hk/beans/cycle/Car.java:
package com.hk.beans.cycle;
public class Car {
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 destroy(){
System.out.println("destroy......");
}
}
/spring-1/src/com/hk/beans/cycle/Main.java:
package com.hk.beans.cycle; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; 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); //关闭IOC容器
ctx.close();
}
}
运行结果:

注:通过结果可知Spring IOC容器对Bean的生命周期进行管理的过程和上述一致。
【创建Bean后置处理器】
1.Bean后置处理器允许在调用初始化方法前后对Bean进行额外的处理。
2.Bean后置处理器对IOC容器里的所有Bean实例逐一处理,而非单一实例。其典型应用是:检查Bean属性的正确性或根据特定的标准更改Bean的属性。
3.对Bean后置处理器而言,需要实现Interface BeanPOSTProcessor接口。在初始化方法被调用前后,Spring将把每个Bean实例分别传递给上述接口的以下两个方法:
-postProcessAfterInitialization(Object bean,String beanName)
-postProcessBeforeInitialization(Object bean,String beanName)
【添加Bean后置处理器后Bean的生命周期】
Spring IOC容器对Bean的生命周期进行管理的过程:
--通过构造器或工厂方法创建Bean实例
--为Bean的属性设置值和对其他Bean的引用
--将Bean实例传递给Bean后置处理器的postProcessBeforeInitialization方法
--调用Bean的初始化方法
--将Bean实例传递给Bean后置处理器的postProcessAfterInitialization方法
--Bean可以使用了
--当容器关闭时,调用Bean的销毁方法
配置文件beans-cycle.xml:
<!-- 配置bean的后置处理器 -->
<bean class="com.hk.beans.cycle.MyBeanPostProcessor"></bean>
/spring-1/src/com/hk/beans/cycle/MyBeanPostProcessor.java:
package com.hk.beans.cycle; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor; public class MyBeanPostProcessor implements BeanPostProcessor{ @Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessAfterInitialization:"+ bean + "," + beanName);
return bean;
} @Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessBeforeInitialization:"+ bean + "," + beanName);
return bean;
}
}
运行结果:

应用:
首先确定配置文件中value="Audi":
<bean id="car" class="com.hk.beans.cycle.Car"
init-method="init"
destroy-method="destroy">
<property name="brand" value="Audi"></property>
</bean>
在MyBeanPostProcessor.java中改变postProcessAfterInitialization中的代码:
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("postProcessAfterInitialization:"+ bean + "," + beanName);
Car car = new Car();
car.setBrand("Ford");
return car;
}
运行结果:

【小结】
实现BeanPostProcessor接口,并具体提供两个方法的实现:
Object postProcessAfterInitialization(Object bean, String beanName):init-method之前被调用
Object postProcessBeforeInitialization(Object bean, String beanName):init-method之后被调用
参数:
bean:bean实例的本身
beanName:IOC容器中配置bean的名字
返回值:是实际上返回给用户的那个bean,注意:可以在以上两个方法中修改返回的bean,甚至返回一个新的bean.
配置bean的后置处理器 :不需要id,IOC容器自动识别是一个BeanPostProcessor
管理Bean的生命周期的更多相关文章
- Spring4.0学习笔记(5) —— 管理bean的生命周期
Spring IOC 容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务 Spring IOC 容器对Bean的生命周期进行管理的过程: 1.通过构造器或工厂方法 ...
- Spring_管理bean的生命周期
Spring IOC 容器对 Bean 的生命周期进行管理的过程:通过构造器或工厂方法创建 Bean 实例为 Bean 的属性设置值和对其他 Bean 的引用将 Bean 实例传递给 Bean 后置处 ...
- 【Spring注解驱动开发】使用InitializingBean和DisposableBean来管理bean的生命周期,你真的了解吗?
写在前面 在<[Spring注解驱动开发]如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!>一文中,我们讲述了如何使用@Bean注解来指定bean初始化和销毁的方法.具体的 ...
- Spring——管理Bean的生命周期
我们可以自定义bean的初始化和销毁方法,这里所指的的初始化和bean的构造不同,初始化是在bean构造完成后,对bean内部的属性或一些逻辑进行初始化. 首先要弄清一些概念: 构造(对象创建) 单实 ...
- Spring管理bean的生命周期
1: bean的创建: 如果我们默认的scope配置为Singleton的话, bean的创建实在Spring容器创建的时候创建: 如果scope的配置为Prototype的话,bena的创建是在 ...
- Spring_管理 Bean 的生命周期
beans-cycle.xml <?xml version="1.0" encoding="UTF-8"?><beans xmlns=&quo ...
- IOC容器中bean的生命周期
一.Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进行管理的过程如下: (1).通 ...
- 使用外部属性文件配置Bean以及Bean的生命周期方法
1.使用外部属性文件配置Bean 在配置文件里配置 Bean 时, 有时需要在 Bean 的配置里混入系统部署的细节信息(例如: 文件路径, 数据源配置信息等). 而这些部署细节实际上需要和 Bean ...
- Spring的Bean的生命周期以及Bean的后置处理器
Bean的生命周期: Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务. Spring IOC 容器对 Bean 的生命周期进 ...
随机推荐
- 在 Vue 项目中(vue-cli2,vue-cli3)使用 pug 简化 HTML 的编写
使用 pug 的原因: 使得 HTML 写起了来更加清晰和快捷 用法: Vue 的用法没有变化: <template lang="pug"> transition(na ...
- Linux安装FTP文档服务器
1.检查是否安装 了vsftpd,如果未安装 则安装vsftpd. 1)查看系统中是否安装了vsftpd,可以通过执行命令 :rpm -qa | grep vsftpd 2)如果没有安装 vsftpd ...
- 状态压缩+枚举 POJ 3279 Fliptile
题目传送门 /* 题意:问最少翻转几次使得棋子都变白,输出翻转的位置 状态压缩+枚举:和之前UVA_11464差不多,枚举第一行,可以从上一行的状态知道当前是否必须翻转 */ #include < ...
- *RelativeLayout的布局参数含义表,如android:layout_alignParentTop等
RelativeLayout 参数规则 一个控件的位置由横,纵两个方向上的距离决定 控件默认的位置在左上角. 单独使用以下属性都只是改变一个方向的相对位置. 如:只使用了android:layout_ ...
- ActiveMQ应用
一. 概述与介绍 ActiveMQ 是Apache出品,最流行的.功能强大的即时通讯和集成模式的开源服务器.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provide ...
- ajax怎么理解?
Ajix是创建交互式网页的前端网页开发技术,不是一种语言,ajax是基于http来传输数据的,他是利用浏览器提供操作http的接口(XMLHttpRequest或者activeXobject),来操作 ...
- java 物理分页和逻辑分页
A.逻辑分页利用游标分页,好处是所有数据库都统一,坏处就是效率低.1.逻辑分页的第一种方式,利用ResultSet的滚动分页.这种分页方式依靠的是对结果集的算法来分页,因此通常被称为“逻辑分页”.步骤 ...
- MyBatis 之一 简介
什么是 MyBatis ? MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis ...
- Django之auth登录认证
前言:我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册.用户登录.用户认证.注销.修改密码等功能,这还真是个麻烦的事情呢. Django作为一个完美主义者的 ...
- vue项目国际化实现 vue-i18n使用详细教程
1.安装vue-i18n: npm i vue-i18n -S 当然你也可以这样: <script src="https://unpkg.com/vue/dist/vue.js&quo ...