Spring创建Bean的流程分享
Spring创建Bean流程


大致步骤
简单来说:Bean会经历四个阶段: 实例化–》属性赋值–》初始化–》销毁
具体来说:
- 实例化:new xxx();有两个时候会触发实例化:
像容器申请一个Bean的时候
当容器在初始化一个Bean的时候,发现该Bean还依赖另一个Bean。(在BeanDefinition中找到)
- 设置对象属性:通过BD找到Bean需要注入的一些属性,并注入,当发现依赖另一个对象时,触发另一个对象的实例化。
- 处理Aware接口:Spring会检测对象是否实现了XxxAware接口,如果实现了,就会调用对应的方法。例如BeanNameAware(对BeanName进行设置)、BeanClassLoaderAware(传入一个自定义类加载器)、BeanFactoryAware(扩展BeanFactory)BeanPostProcessor的前置处理。
initializingBean: Spring检测对象如果实现了这个接口,就会执行他的afterPropertiesSet()方法,定制初始化逻辑。init-method:如果Spring发现Bean实现了这个属性,就会调用他的配置方法,执行初始化逻辑。或者使用注解 BeanPostProcessor的后置处理。到目前位置,Bean的创建过程就完成了,可以正常使用了。DisposableBean:当Bean实现了这个接口,在销毁前就会调用destory()方法destory-method:销毁方法,可以进行内存回收,通过@PreDestory注解
各个接口介绍
1.什么是BeanDefinition?
BeanDefinition 是定义 Bean 的配置元信息接口
- Bean 的类名
- 设置父 bean 名称
- Bean 行为配置信息,作用域、自动绑定模式、生命周期回调、延迟加载、初始方法、销毁方法等
- Bean 之间的依赖设置,dependencies
- 构造参数、属性设置

2.Aware接口
该接口是一个标识接口,具体的方法需要子类自己去实现。
Aware类型的接口的作用就是让我们能够拿到Spring容器中的一些资源。
基本都能够见名知意,Aware之前的名字就是可以拿到什么资源,例如BeanNameAware可以拿到BeanName,以此类推。
调用时机需要注意:所有的Aware方法都是在初始化阶段之前调用的!
3.BeanPostProcessor
做通知。
4.initializingBean
afterPropertiesSet这个方法可以用在一些特殊情况中,也就是某个对象的某个属性需要经过外界得到。
比如说查询数据库等方式,这时候可以用到spring的该特性,只需要实现InitializingBean即可
5.init-method
用来替代继承 InitializingBean接口
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
SpringBoot使用Editor.md构建Markdown富文本编辑器示例
这篇文章主要介绍了SpringBoot使用Editor.md构建Markdown富文本编辑器示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-03-03
深入讲解spring boot中servlet的启动过程与原理
这篇文章主要给大家介绍了关于spring boot中servlet启动过程与原理的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2018-07-07
Spring中如何使用@Value注解实现给Bean属性赋值
这篇文章主要介绍了Spring中如何使用@Value注解实现给Bean属性赋值的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-08-08
浅析Java中Apache BeanUtils和Spring BeanUtils的用法
这篇文章主要介绍了Java中Apache BeanUtils和Spring BeanUtils的用法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-11-11


最新评论