Spring - IoC(10): 生命周期
Spring 容器可以管理 singleton 作用域 Bean 的生命周期,容器能够跟踪 Bean 实例的创建、销毁。管理 Bean 生命周期行为主要有两个时机:
注入 Bean 的依赖关系之后
即将销毁 Bean 之间
依赖关系注入之后的行为
有三种方式可以在 Bean 的所有属性设置成功后执行特定的行为:
实现 org.springframework.beans.factory.InitializingBean 接口
使用 init-method 属性
使用 @PostConstruct 注解
实现 InitializingBean 接口的示例
Bean 的定义:
public class ExampleBean implements InitializingBean {
private String field1;
private String field2;
public void setField1(String field1) {
this.field1 = field1;
System.out.println("field1 was set.");
}
public void setField2(String field2) {
this.field1 = field2;
System.out.println("field2 was set.");
}
public ExampleBean() {
System.out.println("In ExampleBean Constructor.");
}
public void afterPropertiesSet() throws Exception {
System.out.println("All properties were set.");
}
}
Spring 配置:
<bean id="eb" class="com.huey.dream.bean.ExampleBean">
<property name="field1" value=""/>
<property name="field2" value=""/>
</bean>
测试方法:
@Test
public void testLifecycle() throws Exception {
ApplicationContext appCtx =
new ClassPathXmlApplicationContext("applicationContext.xml");
}
结果输出:
In ExampleBean Constructor.
field1 was set.
field2 was set.
All properties were set.
使用 init-method 属性的示例
Bean 的定义:
public class ExampleBean {
private String field1;
private String field2;
public void setField1(String field1) {
this.field1 = field1;
System.out.println("field1 was set.");
}
public void setField2(String field2) {
this.field1 = field2;
System.out.println("field2 was set.");
}
public ExampleBean() {
System.out.println("In ExampleBean Constructor.");
}
public void init() throws Exception {
System.out.println("In init method.");
}
}
Spring 配置:
<bean id="eb" class="com.huey.dream.bean.ExampleBean" init-method="init">
<property name="field1" value=""/>
<property name="field2" value=""/>
</bean>
使用 @PostConstruct 注解
Bean 的定义:
public class ExampleBean {
private String field1;
private String field2;
public void setField1(String field1) {
this.field1 = field1;
System.out.println("field1 was set.");
}
public void setField2(String field2) {
this.field1 = field2;
System.out.println("field2 was set.");
}
public ExampleBean() {
System.out.println("In ExampleBean Constructor.");
}
@PostConstruct
public void init() throws Exception {
System.out.println("In init method.");
}
}
Spring 配置:
<bean id="eb" class="com.huey.dream.bean.ExampleBean">
<property name="field1" value=""/>
<property name="field2" value=""/>
</bean>
Bean 销毁之前的行为
与定制初始化行为类似,也有三种方式可以在 Bean 实例销毁前执行特定的行为:
实现 org.springframework.beans.factory.DisposableBean 接口
使用 destroy-method 属性
使用 @PreDestroy 注解
Spring - IoC(10): 生命周期的更多相关文章
- Spring Bean的生命周期、Spring MVC的工作流程、IOC,AOP
1.Spring Bean的生命周期? (1)构造方法实例化bean. (2)构造方法设置对象属性. (3)是否实现aware接口,三种接口(BeanNameAware,BeanFactoryAwar ...
- 第37讲 谈谈Spring Bean的生命周期和作用域
在企业应用软件开发中,Java 是毫无争议的主流语言,开放的 Java EE 规范和强大的开源框架功不可没,其中 Spring 毫无疑问已经成为企业软件开发的事实标准之一.今天这一讲,我将补充 Spr ...
- Spring Bean的生命周期,《Spring 实战》书中的官方说法
连着两天的面试 ,都问到了 Spring 的Bean的生命周期,其中还包括 昨晚一波阿里的电话面试.这里找到了Spring 实战中的官方说法.希望各位要面试的小伙伴记住,以后有可能,或者是有时间 去看 ...
- 在web.xml中配置监听器来控制ioc容器生命周期
5.整合关键-在web.xml中配置监听器来控制ioc容器生命周期 原因: 1.配置的组件太多,需保障单实例 2.项目停止后,ioc容器也需要关掉,降低对内存资源的占用. 项目启动创建容器,项目停止销 ...
- Spring学习手札(四)谈谈Spring Bean的生命周期及作用域
在Spring中,那些组成应用程序的主体以及由Spring IoC容器所管理的对象,被称之为Bean.Bean与应用程序中其他对象(比如自己创建类)的区别就是,Bean是由IoC容器创建于销毁的.在S ...
- Spring Bean的生命周期详解(转)
Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...
- Spring5源码解析-论Spring DispatcherServlet的生命周期
Spring Web框架架构的主要部分是DispatcherServlet.也就是本文中重点介绍的对象. 在本文的第一部分中,我们将看到基于Spring的DispatcherServlet的主要概念: ...
- 谈谈Spring bean的生命周期(一)
简介 本片文章主要讲Spring IOC容器中 bean 的生命周期 Spring bean 生命周期 Spring 中bean的声明周期 可以分为如下4个阶段: 实例化阶段--Instantiati ...
- Spring应用上下文生命周期
Spring应用上下文生命周期整体分成四个阶段 ConfigurableApplicationContext#refresh,加载或者刷新持久化配置 ConfigurableApplicationCo ...
随机推荐
- mono webreques https exception
前几天在做一个使用URL通过WebRequest请求HTML页面的功能的时候遇到了点坑,程序在开发环境没有任何的问题,部署到linux mono上之后就跪了.代码如下: public static s ...
- 创龙DSP6748开发板SYS/BIOS的LED闪烁-第2篇
1. 作为1个456MHz的处理器,不跑个操作系统说不过去,直接打开工程\Demo\SYSBIOS\Application\GPIO_LED,主函数比较简单 // 创建任务 Task_create(t ...
- C#获取网络图片
简单获取图片 string url = zhi_txt.Text;//图片地址 string dizhi = lujing.Text;//图片下载后保存路径及图片名称要写在一块 WebClient w ...
- 纯HTML+CSS实现阿童木头像
他有十万马力,能上天能入地:他分辨善恶,是勇敢正义化身:1963年,他登上荧幕,在日本创下了未曾有过的高收视率……他叫阿童木,一个纯真.善良.勇 敢的机器娃娃.“阿童木之父”手冢治虫曾说,将阿童木生日 ...
- 第十六篇 Python之迭代器与生成器
一.迭代器 一. 递归和迭代 生活实例说明什么是递归和迭代 A想去腾达大厦,问B怎么走路,B 说我不知道,我给你问问C,C也不知道,C又去问D,D知道,把路告诉了C,C又告诉B,B最后告诉A, 这就是 ...
- linux下 su 与 su - 的区别和使用
Linux下su与su -命令的区别 在启动服务器ntpd服务时遇到一个问题 使用 su root 切换到root用户后,不可以使用service命令: 使用 su - 后,就可以使用servic ...
- CodeForces-455A Boredom
题目链接 https://vjudge.net/problem/CodeForces-455A 题面 Description Alex doesn't like boredom. That's why ...
- Word2vec之CBOW
一.Word2vec word2vec是Google与2013年开源推出的一个用于获取word vecter的工具包,利用神经网络为单词寻找一个连续向量看空间中的表示.word2vec是将单词转换为向 ...
- [译]在SQL查询中如何映射(替换)查询的结果?
问题来源: https://stackoverflow.com/questions/38567366/mapping-values-in-sql-select 有一个表格,就称它Plant,它有三列: ...
- 简单理解DES加密算法
数据加密标准(Data Encryption Standard,DES)是当前使用最广泛的加密体制,对于任意的加密方案,总有两个输入:明文和密钥. 明文是64bits,密钥是56bits 加密过程就是 ...