Spring——管理Bean的生命周期
我们可以自定义bean的初始化和销毁方法,这里所指的的初始化和bean的构造不同,初始化是在bean构造完成后,对bean内部的属性或一些逻辑进行初始化。
首先要弄清一些概念:
- 构造(对象创建)
- 单实例:在容器启动时创建对象
- 多实例:在每次获取的时候创建对象
- 初始化:在对象创建后调用
- 销毁:
- 单实例:在容器关闭时执行销毁方法
- 多实例:容器不会管理,不会调用销毁方法
下面提供几种方法供参考:
一、指定初始化和销毁方法
在配置类中,我们可以通过@Bean指定initMethod 和destroyMethod ,分别指向类中的初始化和销毁方法。
二、实现InitializingBean和DisposableBean
实现接口中的InitializingBean(定义初始化逻辑)和destroy(定义销毁逻辑)方法即可。
三、通过@PostConstruct和@PreDestroy注解
在初始化和销毁方法上分别添加@PostConstruct和@PreDestroy注解,这样就能给Bean实现初始化和销毁。
四、实现后置处理器BeanPostProcessor接口
这里的两个方法postProcessBeforeInitialization和postProcessAfterInitialization,分别会在初始化前和初始化后执行。


实现逻辑:
BeanFactory在创建bean时,会先调用initializeBean方法进行初始化,并在初始化前获取到所有后置处理器,并执行后置处理器的postProcessBeforeInitialization方法。
执行完所有后置处理器的postProcessBeforeInitialization方法后,接着BeanFactory将执行完初始化。
初始化完成后,继续获取所有的后置处理器,循环执行所有的postProcessAfterInitialization方法。
方法三的实现逻辑也是通过后置处理器来完成的。
在执行postProcessBeforeInitialization时,会扫描标注有@PostConstruct注解的方法的类,最终定位到对应方法并执行。
Spring——管理Bean的生命周期的更多相关文章
- Spring管理bean的生命周期
1: bean的创建: 如果我们默认的scope配置为Singleton的话, bean的创建实在Spring容器创建的时候创建: 如果scope的配置为Prototype的话,bena的创建是在 ...
- 深究Spring中Bean的生命周期
前言 这其实是一道面试题,是我在面试百度的时候被问到的,当时没有答出来(因为自己真的很菜),后来在网上寻找答案,看到也是一头雾水,直到看到了<Spring in action>这本书,书上 ...
- JAVA面试题:Spring中bean的生命周期
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...
- Spring4.0学习笔记(5) —— 管理bean的生命周期
Spring IOC 容器可以管理Bean的生命周期,Spring允许在Bean生命周期的特定点执行定制的任务 Spring IOC 容器对Bean的生命周期进行管理的过程: 1.通过构造器或工厂方法 ...
- Spring中Bean的生命周期及其扩展点
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/6106456.html Spring中Bean的管理是其最基本的功能,根据下面的图来了解Spr ...
- 简:Spring中Bean的生命周期及代码示例
(重要:spring bean的生命周期. spring的bean周期,装配.看过spring 源码吗?(把容器启动过程说了一遍,xml解析,bean装载,bean缓存等)) 完整的生命周期概述(牢记 ...
- 一分钟掌握Spring中bean的生命周期!
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean 的别名只能维持 ...
- Spring中bean的生命周期!
Spring 中bean 的生命周期短暂吗? 在spring中,从BeanFactory或ApplicationContext取得的实例为Singleton,也就是预设为每一个Bean的别名只能维持一 ...
- Spring的Bean的生命周期以及Bean的后置处理器
Bean的生命周期: Spring IOC 容器可以管理 Bean 的生命周期, Spring 允许在 Bean 生命周期的特定点执行定制的任务. Spring IOC 容器对 Bean 的生命周期进 ...
随机推荐
- echart两组柱状图对比时,不同类型根据各类型的最大值为基准进行展示
项目中遇到的问题:因为数据太小,箭头的地方展示不出来,这时的两组对比数据是根据一个最大值为基准进行渲染的.但我们想实现不同类型的对比根据不同的基准值渲染. 理想效果如下图: 实现代码: option ...
- Spring--2.Spring之IOC--IOC容器的23个实验(1)
实验1.IOC容器创建对象,并为属性赋值 Hello World:(通过各种方式给容器中注册对象(注册会员)) 以前是自己new对象,现在所有对象交给容器创建:给容器中注册组件 以后框架编写流程: ...
- wepy怎么在生命周期中调用methods方法
很简单: 比如在 onLoad () { imgRemove(e) { this.methods.onRemove(e) } } 在methods中就可以直接调用属于它的方法, ...
- 小程序的<label>标签
用来改进表单组件的可用性. 使用for属性找到对应的id,或者将控件放在该标签下,当点击时,就会触发对应的控件. for优先级高于内部控件,内部有多个控件的时候默认触发第一个控件. 目前可以绑定的控件 ...
- 田忌赛马 - dp
Here is a famous story in Chinese history. That was about 2300 years ago. General Tian Ji was a high ...
- Webpack实战(三):作为前端你不得不懂的Webpack资源入口和出口的配置
关于Webpack前两篇跟大家分享的主要是Webpack的一些基本的配置,今天开始我们详细了解一下有关Webpack的各种配置,今天主要跟大家分享的是Webpack的资源入口和资源出口的配置. 如果想 ...
- 测试必备之Java知识(三)—— 集合、Map相关
集合相关 List.Set.Map的区别 类型 描述 List 允许重复对象,可插入多个null元素,有序 Set 不允许重复对象,只允许一个null元素,无序 Map 不是collection的子接 ...
- 为什么 K8s 在阿里能成功?| 问底中国 IT 技术演进
作者: 曾凡松 阿里云云原生应用平台高级技术专家 张振 阿里云云原生应用平台高级技术专家 导读:本文描述了阿里巴巴在容器管理领域的技术演进历程,解读了为什么 K8s 最终能够大获成功的原因,以及到今年 ...
- java byte/short/char补充(了解)
1.在数学运算中会自动提升数据类型为 int 2.在基本赋值中,若右册的常量不超过取值范围,javac 添加 强制转换,否则报错 3.若右册 含有 变量 而不是直接使用常量相加,编译报错 例子 pub ...
- matplotlib 散点图
一.特点 离散的数据,查看分布规律,走向趋势 二.使用 1.核心 plt.scatter(x, y) # x为x轴的数据,可迭代对象,必须是数字 # y为y轴的数据,可迭代对象,必须是数字 # x和y ...