Spring(十二):IOC容器中Bean的生命周期方法
IOC容器中Bean的生命周期方法
1)Spring IOC容器可以管理Bean的声明周期,Spring允许在Bean生命周期的特定点执行定制的任务。
2)Spring IOC容器对Bean的生命周期进行管理的过程:
--- 通过构造器或工厂方法创建Bean实例;
--- 为Bean的属性设置值和对其他Bean的引用;
--- Bean可以使用
--- 当容器关闭是,调用Bean的销毁方法
3)在Bean的声明里设置init-method和destroy-method属性,为Bean指定初始化和销毁方法。
演示:
第一步:创建一个Java Project,并导入以下包:

第二步:在src下添加com.dx.spring.beans.cycle.Member.java和spring bean配置文件bean-cycle.xml
Member.java
package com.dx.spring.beans.cycle;
public class Member {
public Member() {
System.out.println("Member constructor ... ");
}
private String name;
public void setName(String name) {
System.out.println("setName " + name);
this.name = name;
}
public void initMethod() {
System.out.println("init method");
}
public void destroyMethod() {
System.out.println("despose method");
}
}
注意:Member中的initMethod和destroyMethod两个方法名字是任意的。
bean-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="member" class="com.dx.spring.beans.cycle.Member" init-method="initMethod" destroy-method="destroyMethod">
<property name="name" value="member1"></property>
</bean>
</beans>
第三步:使用IOC容器管理Bean并关闭IOC容器查看打印日志:
package com.dx.spring.beans.cycle;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("bean-cycle.xml");
Member member = (Member) ctx.getBean("member");
System.out.println(member);
ctx.close(); // 关闭IOC容器
}
}
打印信息如下:
信息: Loading XML bean definitions from class path resource [bean-cycle.xml]
Member constructor ...
setName member1
init method
com.dx.spring.beans.cycle.Member@4f7d0008
May 24, 2018 9:41:33 PM org.springframework.context.support.ClassPathXmlApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@4bf558aa: startup date [Thu May 24 21:41:33 CST 2018]; root of context hierarchy
despose method
创建Bean后置处理器
1)Bean后置处理器允许在调用初始化方法前后对Bean进行额外的处理;
2)Bean后置处理器对IOC容器里的所有Bean实例逐一进行处理,而非单一实例。其经典应用是:检查Bean属性的正确性或根据特定的标准更改Bean的属性。
3)对Bean后置处理器而言,需要实现abstract interface org.springframework.beans.factory.config.BeanPostProcessor抽象接口。在初始化方法被调用前后,Spring将把每个Bean实例分别传递给上述接口的以下两个方法:

演示:
第一步:添加com.dx.spring.beans.cycle.MyBeanPostProcessor.java使其实现抽象接口类BeanPostProcessor
package com.dx.spring.beans.cycle; import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor; public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization:" + beanName + "," + bean);
return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
} @Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization" + beanName + "," + bean);
return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
}
}
第二步:修改spring-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="member" class="com.dx.spring.beans.cycle.Member" init-method="initMethod" destroy-method="destroyMethod">
<property name="name" value="member1"></property>
</bean>
<!-- 注意:这里不需要指定id -->
<bean class="com.dx.spring.beans.cycle.MyBeanPostProcessor"></bean>
</beans>
第三步:执行Main测试,查看打印信息:
信息: Loading XML bean definitions from class path resource [bean-cycle.xml]
Member constructor ...
setName member1
postProcessBeforeInitialization:member,com.dx.spring.beans.cycle.Member@1a968a59
init method
postProcessAfterInitializationmember,com.dx.spring.beans.cycle.Member@1a968a59
com.dx.spring.beans.cycle.Member@1a968a59
May 24, 2018 9:46:07 PM org.springframework.context.support.ClassPathXmlApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@4bf558aa: startup date [Thu May 24 21:46:06 CST 2018]; root of context hierarchy
despose method
Spring(十二):IOC容器中Bean的生命周期方法的更多相关文章
- spring IOC 容器中 Bean 的生命周期
IOC 容器中 Bean 的生命周期: 1.通过构造器或工厂方法创建 Bean 实例 2.为 Bean 的属性设置值和对其他 Bean 的引用 3.调用 Bean 后置处理器接口(BeanPostPr ...
- Spring IOC容器中Bean的生命周期
1.IOC容器中Bean的生命周期 构造器函数 设置属性 初始化函数(在Bean配置中 init-method) 使用Bean 结束时关闭容器(在Bean中配置destroy-method) 2.Be ...
- Spring学习-- IOC 容器中 bean 的生命周期
Spring IOC 容器可以管理 bean 的生命周期 , Spring 允许在 bean 声明周期的特定点执行定制的任务. Spring IOC 容器对 bean 的生命周期进行管理的过程: 通过 ...
- IOC容器中bean的生命周期
一.Bean的生命周期 Spring IOC容器可以管理Bean的生命周期,允许在Bean生命周期的特定点执行定制的任务. Spring IOC容器对Bean的生命周期进行管理的过程如下: (1).通 ...
- Spring4学习回顾之路06- IOC容器中Bean的生命周期方法
SpringIOC容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行特定的任务! Spring IOC容器对Bean的生命周期进行管理的过程: -通过构造器或者工厂方法创建 ...
- Spring重点—— IOC 容器中 Bean 的生命周期
一.理解 Bean 的生命周期,对学习 Spring 的整个运行流程有极大的帮助. 二.在 IOC 容器中,Bean 的生命周期由 Spring IOC 容器进行管理. 三.在没有添加后置处理器的情况 ...
- [原创]java WEB学习笔记101:Spring学习---Spring Bean配置:IOC容器中bean的声明周期,Bean 后置处理器
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring容器中bean的生命周期以及关注spring bean对象的后置处理器:BeanPostProcessor(一个接口)
Spring IOC 容器对 Bean 的生命周期进行管理的过程: 1.通过构造器或工厂方法创建 Bean 实例 2.为 Bean 的属性设置值和对其他 Bean 的引用 3.将 Bean 实例传递给 ...
- 7 -- Spring的基本用法 -- 9...容器中Bean的生命周期
7.9 容器中Bean的生命周期 Spring可以管理singleton作用域的Bean的生命周期,Spring可以精确地知道该Bean何时被创建,何时被初始化完成.容器何时准备销毁该Bean实例. ...
随机推荐
- CentOS下的apache配置支持php
修改Apache的配置文件httpd.conf(vi /etc/httpd/conf/httpd.conf) DirectoryIndex index.html index.php #添加index. ...
- 使用GIT进行源码管理——GIT托管服务2018
我曾经介绍过几个在线的GIT托管服务,然而时过境迁,发生了不少变化,便写了此文章,在新的一年重新更新一下: 国外托管网站: 国外托管网站比起国内的来相对靠谱点,但一个主要缺点是网速较慢,并且可能在 ...
- c#调用刀片小票打印机
public static bool Print(int orderId, string orderTime) { bool b = true; string cut = ((char)29).ToS ...
- 计算机意外地重新启动或遇到错误。windows安装无法继续。若要安装windows 请单击 确定 重新启动计算机
快安装完系统时遇到提示:计算机意外地重新启动或遇到错误.Windows 安装无法继续.若要安装Windows,请单击“确定”重新启动计算机,然后重新启动安装”.如下图所示: 解决办法: 当出现如上提示 ...
- Java---16---多线程---死锁
死锁: 概念: 所谓死锁: 是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用.它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的 ...
- Windows Phone本地数据库(SQLCE):4、[Column]attribute(翻译) (转)
这是“windows phone mango本地数据库(sqlce)”系列短片文章的第四篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知 ...
- UIView 的旋转和缩放
原文地址:http://www.cnblogs.com/gaoxiao228/archive/2012/05/04/2483577.html label.transform = CGAffineTra ...
- JS 日期实用方法
var DateUtil = function(){ /** * 判断闰年 * @param date Date日期对象 * @return boolean true 或false */ this.i ...
- 老美的zxing和日本的qrcode哪个好?
ZXing用Java实现的多种格式的1D/2D条码图像处理库,Zxing库的主要部分支持以下几个功能:核心代码的使用.适用于J2SE客户端的版本.适用于Android客户端的版本(即BarcodeSc ...
- 每天一个linux命令-lsof -i :port命令
使用lsof -i :port就能看见所指定端口运行的程序,同时还有当前连接. losf -i:port | wc -l,统计端口连接数