spring bean的生命周期-程序员宅基地

技术标签: java  

spring bean的生命周期

(1)实例化Bean:
对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用createBean进行实例化。对于ApplicationContext容器,当容器启动结束后,通过获取BeanDefinition对象中的信息,实例化所有的bean。
(2)设置对象属性(依赖注入):
实例化后的对象被封装在BeanWrapper对象中,紧接着,Spring根据BeanDefinition中的信息 以及 通过BeanWrapper提供的设置属性的接口完成依赖注入。
(3)处理Aware接口:
接着,Spring会检测该对象是否实现了xxxAware接口,并将相关的xxxAware实例注入给Bean:
①如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String beanId)方法,此处传递的就是Spring配置文件中Bean的id值;
②如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory()方法,传递的是Spring工厂自身。
③如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文;
(4)BeanPostProcessor:
如果想对Bean进行一些自定义的处理,那么可以让Bean实现了BeanPostProcessor接口,那将会调用postProcessBeforeInitialization(Object obj, String s)方法。由于这个方法是在Bean初始化结束时调用的,所以可以被应用于内存或缓存技术;
(5)InitializingBean 与 init-method:
如果Bean在Spring配置文件中配置了 init-method 属性,则会自动调用其配置的初始化方法。
(6)如果这个Bean实现了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法;

以上几个步骤完成后,Bean就已经被正确创建了,之后就可以使用这个Bean了。

(7)DisposableBean:
当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用其实现的destroy()方法;
(8)destroy-method:
最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

转载于:https://www.cnblogs.com/BonnieWss/p/10867594.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34143774/article/details/93422005

智能推荐

企业微信的后台怎么进入和管理?_企业微信后台-程序员宅基地

文章浏览阅读1w次。企业微信的后台怎么进入和管理? _企业微信后台

【机器学习】QQ-plot深入理解与实现_python qqplot subplot-程序员宅基地

文章浏览阅读1.2w次。QQ-plot深入理解与实现26JUNJune 26, 2013最近在看关于CSI(Channel State Information)相关的论文,发现论文中用到了QQ-plot。Sigh!我承认我是第一次见到这个名词,异常陌生。维基百科给出了如下定义:“在统计学中,QQ-plot(Q代表分位数Quantile)是一种通过画出分位数来比较两个概率分布的图形方法。首先选定_python qqplot subplot

mybatis设置sql执行时间超时时间_mybatis timeout-程序员宅基地

文章浏览阅读2.8w次,点赞3次,收藏21次。存在这样的场景,当一些比较耗时的查询时,如果不中断,则会导致数据库堵塞,进而会拖垮整个数据库服务的正常运行。1.如果你使用的是HikariCP连接池的话,可以在配置文件设置connetion-timeout这个属性(如application.properties)2.如果你使用的是其他链接池,比如tomcat连接池,同时持久化框架用的是mybatis的话,那可以这样设置2.1 在配置文..._mybatis timeout

Windows Data Alignment on IPF, x86, and x86-64_data alignment is intrinsic-程序员宅基地

文章浏览阅读1.4k次。http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vcconwindowsdataalignmentonipfx86x86-64.asp?frame=trueWindows Data Alignment on IPF, x86, and x86-64Kang Su GatlinMic_data alignment is intrinsic

python笔记系列一-程序员宅基地

文章浏览阅读1k次,点赞43次,收藏19次。Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。

C语言简单实现矩阵转置_矩阵转置c代码-程序员宅基地

文章浏览阅读4.2k次,点赞2次,收藏7次。#include <stdio.h>#include <stdlib.h>int main(){ printf("3*4矩阵转置\n"); int b[3][4]; int row, line; //输入 for (row = 0;row < 3;row++) { for (line = 0;line < 4;line++) scanf("%d", &b[row][line]); } //显示输入的矩阵 for (row = 0._矩阵转置c代码

随便推点

linux 后台计算,科学网-如何在Linux中做批处理和后台计算-张彦的博文-程序员宅基地

文章浏览阅读213次。单个计算任务的提交How to compute by Gaussian 03?1. Upload "xxx.gjf" to your folder.2. Perform "g03 xxx.gjf &" in your folder.3. See your tasks by "jobs", it's running. Ok!How to run a Fortran code?1. Uploa..._nohup gaussian

相关教程解压密码_传智播客培训机构文件密码-程序员宅基地

文章浏览阅读1.9w次,点赞2次,收藏7次。本站教程通用解压密码:qinglongweb 如果不是qinglongweb会在下面说明---------------------------------------------------------------------------------------------------------------------------------------------------------_传智播客培训机构文件密码

计算机硬盘能达到5g的速度,5G号称可以达到几GB每秒,但是目前的手机处理器和硬盘可以处理这么庞大的数据量吗?...-程序员宅基地

文章浏览阅读291次。感谢悟空的邀请!“通信行业那些事儿”,专业解读通信、网络类问题,希望我的回答能够给您启发,大家共同探讨、共同提高!欢迎关注我!楼主您好!这个问题,我正好是通信行业的从业人员,来给楼主解读一下,希望能给您一些参考。关于5G标准制定的网速在协议的标准中,最初5G网络要求用户下行可以达到1Gbps的速率,后来随着技术的进一步演进,现在的很多厂商都将目光放到了10Gbps的速率级别。当然在实验室环境中,很..._5g速度那么快,cpu如何处理

计算机网络——网络层提供的两种服务_试比较网络层提供的两种服务。-程序员宅基地

文章浏览阅读5.2k次,点赞2次,收藏8次。    网络层所要解决的问题之一就是要向上层提供怎样的服务。实际来说存在两种服务,分别是面向连接的虚电路服务和无连接的数据报服务。    虚电路服务的特点在于其可靠通信由网络来保证。必须建立网络层的连接——虚电路VC,通信双方沿着已经建立的虚电路发送分组。目的主机的地址仅仅在连接建立阶段使用,之后每个分组的首部只需要携带一条虚电路的编号。    这种通信方式如果再使用可靠传输的网络协议,就可以使所发送的分组最终正确到达接收方。通信结束后,需要释放之前所建立的虚电路。很多广域分组交换网都使用面向连接的虚_试比较网络层提供的两种服务。

SpringBoot轻松实现ip解析(含源码)_springboot ip-程序员宅基地

文章浏览阅读2.1w次,点赞28次,收藏50次。IP地址一般以数字形式表示,如192.168.0.1。IP解析是将这个数字IP转换为包含地区、城市、运营商等信息的字符串形式,如“广东省深圳市 电信”。这样更方便人理解和使用。通过这样的一套流程下来,我们就能实现对每一个请求进行ip 获取、ip解析如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!_springboot ip

shell基础---exit用法_shell exit-程序员宅基地

文章浏览阅读1.3w次。shell基础篇---exit用法exit:退出脚本exit #(#可以使用0至255,0表示正确,其他表示不同的错误)如果脚本没有明确定义退出状态码,那么,最后执行的一条命令的退出码即为脚本的退出状态码bash中常用的条件测试有三种:整数测试:数字判断一些命令:#-gt是大于#-lt是小于#-eq是等于#-ne是不等于#-ge是大于等于#le是小于等于INT1=63INT2=77[ $INT1 -eq $INT2 ]文件测试:-e FILE:测试文件是否存在-f._shell exit

推荐文章

热门文章

相关标签