Springboot学习记录3 bean相关

59 阅读1分钟

bean的生命周期大致可以分为:Bean定义、Bean的初始化、Bean的生存期和Bean的销毁4个部分。

Bean的定义

Bean的定义大概流程如下:

  • Spring通过配置扫描文件,定位资源。如扫描@ComponentScan定义的位置
  • 找到资源后开始解析,将定义的信息保存起来,此时还没有初始化Bean,也就没有Bean的实例,它有的仅仅是Bean的定义。
  • 将Bean的定义发布到IoC容器中,此时,IoC容器也只有Bean的定义,还是没有Bean的实例生成。

Bean的初始化

Bean的初始化就是在IoC容器中创建Bean的实例,并且相关依赖已经配置好了。有时候由于需要,我们想要在取出Bean的时候完成初始化和依赖注入,也就是Bean只是将定义发布到IoC容器而不做实例化和依赖注入,当我们取出来的时候才做初始化和依赖注入等操作。

在@ComponentScan中有一个配置项是lazyInit,只可以配置boolean值,默认是关闭的(false),开启后就可以实现我们上面的要求。

Spring在完成依赖注入之后,还提供了一系列的接口和配置来完成Bean初始化的过程

image.png

Bean的作用域

在一般的容器中,Bean都会存在单例(Singleton)和原型(Prototype)两种作用域。而在Web容器中,则存在页面(page)、请求(request)、会话(session)和应用(application)4种作用域。对于页面(page),是针对JSP当前页面的作用域,所以Spring是无法支持的。

为了满足各种需求,Spring提供了多种作用域:

image.png