Spring Bean生命周期详解
对象生命周期:创建(实例化----初始化)---使用----销毁,而在Spring中,Bean对象周期当然遵从这一过程,但是Spring提供了许多对外接口,允许开发者对三个过程(实例化、初始化、销毁)的前后做一些操作。在Spring Bean中,实例化是为Bean对象开辟空间(构造函数),初始化则是对属性的初始化,属性注入(setter方法注入属性)。
1.Bean自身方法:init-method/destroy-method,通过为配置文件bean定义中添加相应属性指定相应执行方法。
2.Bean级生命周期接口:BeanNameAware、BeanFactoryAware、InitializingBean和DiposableBean这些接口的方法。每个Bean选择实现,可选择各自的个性化操作。
3.容器级生命周期接口方法:这个包括了InstantiationAwareBeanPostProcessor 和 BeanPostProcessor 这两个接口实现(前者继承自后者),一般称它们的实现类为“后处理器“,这些接口是每个bean实例化或初始化时候都会调用。
4.工厂后处理器接口方法:也是容器级别的,但他们是在上下文装置配置文件之后调用(BeanFactoryPostProcessor、 CustomAutowireConfigurer)。
Bean具体生命周期
1.postProcessBeanFactory(ConfigurableListableBeanFactory c):工厂后处理器,这个事故IoC容器(ApplicationContext)初始化一部分。实现:写一个类,实现BeanFactoryPostProcessor接口,重写该方法,并在
Spring配置文件中配置该类的一个bean。
2.postProcessBeforeInstantiation(Class<?>c,String beanName):所有bean对象(注1)实例化之前执行,具体点就是执行每个bean类构造函数之前。 实现:写一个类,实现InstantiationAwareBeanPostProcessor接
口,重写该方法,在Spring配置文件中配置该类的一个bean。返回一个Object,但是实际上你返回一个null即可。
3.Bean实例化,调用bean类构造函数。
4.postProcessAfterInstantiation(Object bean,String beanName):bean类实例化之后,初始化之前调用。
5.postProcessPropertyValue:属性注入之前调用。
6.setBeanName(String beanName):属性注入后调用,该方法作用是让bean类知道自己所在的Bean的name或者id属性。
7.setBeanFactory(BeanFactory factory):setBeanName后调用,该方法作用是让bean类知道自己所在的BeanFactory的属性。
8.postProcessBeforeInitialization(Object bean,String beanName):BeanPostProcessor作用是对bean实例化、初始化做些预处理操作。
9.postProcessBeforeInitialization(Object bean,Strign beanName)
10.afterPropertiesSet():bean类实现InitializingBean接口,重写该方法。初始化工作,但实现该接口这种方法和Spring耦合,不推荐。
11.postProcessAfterInitialization(Object bean,Strign beanName)
12.postProcessAfterInitialization(Object bean,Strign beanName)
13.程序执行,bean工作
14.destroy():bean销毁前执行。
15.xml_destroy():实现:spring bean配置文件中配置bean属性destroy-method=”xml_destroy”,这个方法名开发者自己定义。
总结:
实例化》初始化》使用》销毁
Spring Bean生命周期详解的更多相关文章
- 大厂高频面试题Spring Bean生命周期最详解
Spring作为当前Java最流行.最强大的轻量级框架.Spring Bean的生命周期也是面试高频题,了解Spring Bean周期也能更好地帮助我们解决日常开发中的问题.程序员应该都知道Sprin ...
- ASP.NT运行原理和页面生命周期详解及其应用
ASP.NT运行原理和页面生命周期详解及其应用 1. 下面是我画的一张关于asp.net运行原理和页面生命周期的一张详解图.如果你对具体不太了解,请参照博客园其他帖子.在这里我主要讲解它的实际应用. ...
- ASP.NET生命周期详解
最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多处理流程,如管道事件等 ...
- ASP.NET生命周期详解 [转]
最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多处理流程,如管道事件等 ...
- spring bean 生命周期和 ? 作用域? spirng bean 相互依赖? jvm oom ? jvm 监控工具? ThreadLocal 原理
1. spring bean 生命周期 1. 实例化一个bean ,即new 2. 初始化bean 的属性 3. 如果实现接口 BeanNameAware ,调用 setBeanName 4. Bea ...
- Spring点滴四:Spring Bean生命周期
Spring Bean 生命周期示意图: 了解Spring的生命周期非常重要,我们可以利用Spring机制来定制Bean的实例化过程. -------------------------------- ...
- ASP.NET生命周期详解(转)
看到好文章需要分享. 最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多 ...
- Spring Bean 生命周期之destroy——终极信仰
上一篇文章 Spring Bean 生命周期之我从哪里来 说明了我是谁? 和 我从哪里来? 的两大哲学问题,今天我们要讨论一下终极哲学我要到哪里去? 初始化 Spring Bean 有三种方式: @P ...
- 常见问题:Web/Servlet生命周期与Spring Bean生命周期
Servlet生命周期 init()初始化阶段 Servlet容器加载Servlet(web.xml中有load-on-startup=1;Servlet容器启动后用户首次向Servlet发请求;Se ...
随机推荐
- UVa 10382 - Watering Grass 贪心,水题,爆int 难度: 0
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- 基于vue的实战步骤
1.脚手架vue-cli安装 npm install -g vue-cli (npm init -f 生成package.json文件) vue init webpack myapp cd myapp ...
- caffe matlab matcaffe 加载输入网络net时报错
http://blog.csdn.net/xiaojiajia007/article/details/72850247
- 团队项目(MVP------新能源无线充电管理网站)(个人任务3)
现在我们组的项目已经完成了,之前做的欢迎界面已经废弃掉了,于是我重新制作了一个欢迎界面,主要是分为了团队介绍,充电商品的介绍,现在充电新闻的发展,解决方案,成功案例.其中产品里面又有两个商品的售卖页, ...
- 2018idea如何布置tomcat修改URL后连接不到
以下连接 https://blog.csdn.net/cs825900618/article/details/86261019
- CH3401 石头游戏(矩阵快速幂加速递推)
题目链接:传送门 题目: 石头游戏 0x30「数学知识」例题 描述 石头游戏在一个 n 行 m 列 (≤n,m≤) 的网格上进行,每个格子对应一种操作序列,操作序列至多有10种,分别用0~9这10个数 ...
- PyCharm:ModuleNotFoundError: No module named 'selenium'
Mac安装PyCharm后,将已有工程导入,之前使用Mac终端执行脚本时正常,现在报错ModuleNotFoundError: No module named 'selenium',解决方法是在PyC ...
- 《Linux内核原理与分析》第二周作业
反汇编一个简单的C程序 1.实验要求 使用: gcc –S –o test.s test.c -m32 命令编译成汇编代码,对汇编代码进行分析总结.其中test.c的具体内容如下: int g(int ...
- 1.golang的环境搭建及入门
安装包下载 下载链接:https://dl.google.com/go/go1.12.3.windows-amd64.msi 环境搭建 安装完成之后,找一个来存放go语言文件的文件夹,我这里选的是G: ...
- 基于ajax 验证表单是否被占用----------------附:10.25日总结
总得来说,今天的主要工作是注册页面的处理, 1.判断 用户名与密码是否为空值 ,两次密码框输入的值是否相同.判断邮箱过程中,有使用到正则表达式 2.用户名是否使用过,有用到了json与ajax的知识. ...