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 ...
随机推荐
- 58HouseSearch项目迁移到asp.net core
前言 58HouseSearch这个项目原本是基于ASP.NET MVC 4写的,开发环境是Windows+VS2015,发布平台是linux+mono+jexus,这样看来整个项目基本已经满足跨平台 ...
- crontab时间规则
sudo crontab -e 5 * * * *每小时第5分钟执行*/5 * * * *每5分钟执行0 2 * * * 每天凌晨2点执行 cron是一个linux下的定时执行工具,可以在无需人工干预 ...
- 给socks-proxy-agent增加认证
由于需要使用socks代理,查看了nodejs的各种socks库,最终的结论是socks库是其中最完善的,而socks-proxy-agent是以其为基础的封装,可以直接和http模块对接. 不过在尝 ...
- 「暑期训练」「Brute Force」 Far Relative’s Problem (CFR343D2B)
题意 之后补 分析 我哭了,强行增加自己的思考复杂度...明明一道尬写的题- -(往区间贪心方向想了 其实完全没必要,注意到只有366天,直接穷举判断即可. 代码 #include <bits/ ...
- git安装后Gitbase闪退,gui无法使用问题解决
一般是因为null.sys导致,根本原因应该还是你装的盗版系统有问题,解决办法如下 cmd 打开命题提示符后 输入 sc start null 看 null.sys是否有问题,如果有问题,重新 ...
- react实现网站换肤功能
一.目标 提供几种主题色给用户选择,然后根据用户的选择改变应用的主题色: 二.实现原理 1.准备不同主题色的样式文件: 2.将用户的选择记录在本地缓存中: 3.每次进入应用时,读取缓存 ...
- Android之内容提供者ContentProvider的总结
本文包含以下知识点: ContentProvider Uri 的介绍 ContentResolver: 监听ContentProvider的数据改变 一:ContentProvider部分 Conte ...
- jira+mysql+破解+中文+compose
1.制作docker-compose.yml 2.安装 $ docker stack deploy -c docker-compose.yml mshk_jira
- 在线算法&离线算法
[在线算法] 定义:指用户每输入一个查询便马上处理一个查询.该算法一般用较长的时间做预处理,待信息充足以后便可以用较少的时间回答每个查询. 常见在线算法:ST算法 [离线算法] 定义:
- lintcode-64-合并排序数组 II
64-合并排序数组 II 合并两个排序的整数数组A和B变成一个新的数组. 注意事项 你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素. 样例 给出 A = [1, 2, 3, ...