Bean的生命周期

 我来答
舒适还明净的海鸥i
2022-07-19 · TA获得超过1.7万个赞
知道小有建树答主
回答量:380
采纳率:0%
帮助的人:69.9万
展开全部

当一个对象被Spring所管理,那么它的生命周期就完全由容器所控制。Bean的生命周期从大的方面来分可以分为以下四个阶段:
1. 实例化
2. 属性赋值
3. 初始化
4. 销毁
这样的划分是比较笼统的,接下来就从细分的角度来的Bean的生命周期做一个详细的阐述。
我们知道在Java中万物皆对象,而在Spring中被Spring管理的对象被称为bean。那么普通的对象是如何变成bean的呢?

首先,Spring会通过BeanDefinitionReader 从XML、注解、配置类或者是其他方式,读取Bean的定义信息,来生成一个 BeanDefinition ,BeanDefinition接口是Spring对Bean的抽象,是用来描述Bean的。其中包含了如:bean名称、是否是单例的、是否懒加载等描述信息。

有了BeanDefinition之后就可以准备生成实例化的对象了,但在这之前还有一步。就是一个对象它可能会有多个构造方法,那Spring如何知道你要生成哪一个构造方法的对象呢?所以,Spring需要 推断构造方法

有了构造方法之后,就可以实例化对象了。当用户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用 createBean 进行实例化。注意:此处生成的对象都是空对象,也就是说它的属性都是空的,并没有进行依赖注入。

在这一阶段,Spring就会给实例化出来的对象进行赋值。所以就要用到第一步生成的BeanDefinition,Spring根据BeanDefinition中的信息进行依赖注入。 并且通过BeanWrapper提供的设置属性的接口完成依赖注入。 而在这一步也涉及到了循环依赖这一问题。

Aware类型的接口的作用就是让我们能够拿到Spring容器中的一些资源。如果一个Bean实现了该接口,那么当该Bean被spring初始化时,spring会向该Bean注入相关资源(就是会回调接口中的方法)。以下是对Aware接口作用的一个示例:

可以看到,当Spring容器初始化,UserService被初始化,也就调用了UserService所实现的BeanNameAware接口的setBeanName方法。在Spring中这样的Aware类型的接口还有很多,以下是常用的Aware相关接口作用说明:

经过以上的几个步骤,bean对象就已经被正确构造了。但是如果你想要对象被使用之前,在进行一些自定义的处理,就可以定制一些初始化方法。初始化方法调用的流程是这样的:

经过以上的工作后,Bean将一直驻留在应用上下文中给应用使用,直到应用上下文被销毁。Bean的销毁有两个方法:执行DisposableBean的destroy方法、执行当前对象定义的destroy方法。这两个方法的作用是相同的,都是在Bean实例销毁前执行的方法。

至此,SpringBean的生命周期就结束了。总的来说,Bean的生命周期大的方面可以分为:
实例化 ---- 属性赋值 ----- 初始化 ------ 销毁
细分可以如下图所示:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迈杰
2024-11-29 广告
迈杰转化医学研究(苏州)有限公司于2013年成立,其前身为凯杰(苏州)转化医学研究有限公司。基于基因组学、蛋白组学、细胞组学及病理组学等综合性转化医学平台,丰富的伴随诊断开发经验,高质量的管理体系以及高素质的研发管理团队,迈杰转化医学为全球... 点击进入详情页
本回答由迈杰提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式