当前位置:网站首页>Srping中bean的生命周期
Srping中bean的生命周期
2022-08-01 05:48:00 【LiuMM101】
Bean 的生命周期概括起来就是 4 个阶段:
- 实例化(Instantiation)
- 属性赋值(Populate)
- 初始化(Initialization)
- 销毁(Destruction)
实例化
实例化Bean时要看是BeanFactory容器还是ApplicationContext容器。
1.BeanFactory容器:当向容器请求一个未初始的bean时,或初始化bean的时候需要注入注入到另一个尚未初始化的依赖时美容器就会调用creatBean来进行初始化
2.ApplicationContext容器,当容器启动结束后,便实例化所有的bean。
3.容器通过获取BeanDefinition对象中的信息进行实例化。并且这一步仅仅是简单的实例化,并未进行依赖注入
4.实例化对象被包装在BeanWrapper对象中,BeanWrapper提供了设置对象属性的接口,从而避免了使用反射机制设置属性
扫描xml文件、注释类(例:@Component)、配置类中bean的定义(@Configuration -> @Bean)
设置对象属性(依赖注入)
实例化的对象被封装在BeanWrapper对象中,并且此时对象仍然是一个原生的状态,并没有进行依赖注入
随后Spring根据BeanDefinition中的信息进行依赖注入,并且通过BeanWrapper提供的设置属性的接口完成依赖注入
注入Aware接口
随后Spring会检测该对象是否实现了xxxAware接口,并且将相关的实例注入给bean。
此时bean对象已经被正确构造。
BeanNameAware
如果bean实现此接口,spring将bean的id传给setBeanName()方法
BeanFactoryAware
如果bean实现此接口,Spring将调用setBeanFactory方法,将BeanFactory实例传过来
ApplicationContextAware
如果实现此接口,它的setApplicationContext()方法将被调用,将应用上下文的引用传入到bean中;
BeanPostProcessor
该接口提供了两个函数用来对对象在被使用前做一些自定义的处理,此时Bean会被传递进来,可以对bean做任何处理。
前置处理:在Bean实例创建
1.postProcessBeforeInitialzation( Object bean, String beanName )
2.会先于先于InitialzationBean执行,所有的Aware接口的注入就是在此完成的
后置处理:
1.postProcessAfterInitialzation( Object bean, String beanName)
InitializingBean与init-method
当前置处理完成后就会进入本阶段。
InitializingBean 和 init-method 是 Spring 为 bean 初始化提供的扩展点。
InitializingBean接口 的定义如下:
public interface InitializingBean { void afterPropertiesSet() throws Exception; }
在 afterPropertiesSet() 方法写初始化逻辑。
<bean id="student" class="com.ape.demo.Student" init-method="doInit"></bean>
DisposableBean和destroy-method
和init-method一样,通过给destroy-method指定函数,就可以在bean销毁前执行指定的逻辑。
<bean id="student" class="com.ape.demo.Student" destroy-method="doDestory"></bean>
边栏推荐
- MySQL-Data Definition Language-DDLdatebase define language
- vsce package 后出现 Command failed: npm list --production --parseable --depth=99999 --loglevel=error异常
- 响应式织梦模板园林花卉类网站
- 微信小程序接口调用凭证(获取token)auth.getAccessToken接口开发
- Selenium:表单切换
- 牛客多校2022第四场A,H,K,N
- 2022.7.27 Selected lectures on good topics
- vim configuration + ctag is as easy to read code as source insight
- Selenium: upload and download files
- NDK does not contain any platforms problem solving
猜你喜欢
随机推荐
NUMPY
uva10825
可视化全链路日志追踪
轻量级的VsCode为何越用越大?为什么吃了我C盘10G?如何无痛清理VsCode缓存?手把手教你为C盘瘦身
从零开始—仿牛客网讨论社区项目(一)
Selenium: upload and download files
The BP neural network based on MATLAB voice characteristic signal classification
Talk about the bugs in using for in to traverse the array in js
LeetCode 0150. Reverse Polish Expression Evaluation
2022.7.26 Mock Competition
仿牛客网项目总结
太厉害了,终于有人能把文件上传漏洞讲的明明白白了
小白的0基础教程SQL: 关系数据库概述 02
AspNet.WebApi.Owin 自定义Token请求参数
JS的运行原理
MySQL-Data Operation-Group Query-Join Query-Subquery-Pagination Query-Joint Query
How JS works
微信小程序获取手机号phonenumber.getPhoneNumber接口开发
uva10825
2022/07/29 入职健海JustFE团队,我学到了高效开发(年中总结)