Spring:浅谈对SpringBean的认识

一、SpringBean的生命周期

1、实例化bean对象 :通过反射的方式进行对象的创建,此时的创建只是在堆空间中申请空间,属性都是默认值。

2、设置对象属性 :给对象中的属性进行值的设置工作。

3、检查Aware相关接口并设置相关依赖 :如果对象中需要引用容器内部的对象,那么需要调用aware接口的子类方法来进行统一的设置。

4、BeanPostProcessor的前置处理 :对生成的bean对象进行前置的处理工作。

5、检查是否是InitializingBean的子类来决定是否调用afterPropertiesSet方法 :判断当前bean对象是否设置了InitializingBean接口,然后进行属性的设置等基本工作。

6、检查是否配置有自定义的init-method方法 :如果当前bean对象定义了初始化方法,那么在此处调用初始化方法。

7、BeanPostProcessor后置处理 :对生成的bean对象进行后置的处理工作。

8、注册必要的Destruction相关回调接口 :为了方便对象的销毁,在此处调用注销的回调接口,方便对象进行销毁操作。

9、获取并使用bean对象 :通过容器来获取对象并进行使用。

10、是否实现DisposableBean接口 :判断是否实现了DisposableBean接口,并调用具体的方法来进行对象的销毁工作。

11、是否配置有自定义的destory方法:如果当前bean对象定义了销毁方法,那么在此处调用销毁方法。

二、SpringBean的作用域

1、singleton:使用该属性定义Bean时,IOC容器仅创建一个Bean实例,IOC容器每次返回的是同一个Bean实例。

2、prototype:使用该属性定义Bean时,IOC容器可以创建多个Bean实例,每次返回的都是一个新的实例。

3、request:该属性仅对HTTP请求产生作用,使用该属性定义Bean时,每次HTTP请求都会创建一个新的Bean,适

用于WebApplicationContext环境。

4、session:该属性仅用于HTTP Session,同一个Session共享一个Bean实例。不同Session使用不同的实例。

5、global-session:该属性仅用于HTTP Session,同session作用域不同的是,所有的Session共享一个Bean实例。

三、SpringBean的自动装配

Bean的自动装配指的是Bean的属性值在进行注入的时候通过某种特定的规则和方式去容器中查找,并设置到具体的对象属性中,主要有五种方式:

1、no:缺省情况下,自动配置是通过"ref"属性手动设定,在项目中最常用。

2、byName:根据属性名称自动装配。如果一个bean的名称和其他bean属性的名称是一样的,将会自装配它。

3、byType:按数据类型自动装配,如果bean的数据类型是用其它bean属性的数据类型,兼容并自动装配它。

4、constructor:在构造函数参数的byType方式。

5、autodetect:如果找到默认的构造函数,使用"自动装配用构造"; 否则,使用"按类型自动装配"。

相关推荐
uzong3 小时前
技术故障复盘模版
后端
GetcharZp3 小时前
基于 Dify + 通义千问的多模态大模型 搭建发票识别 Agent
后端·llm·agent
桦说编程4 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
IT毕设实战小研4 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
wyiyiyi4 小时前
【Web后端】Django、flask及其场景——以构建系统原型为例
前端·数据库·后端·python·django·flask
甄超锋5 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
阿华的代码王国5 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Jimmy5 小时前
AI 代理是什么,其有助于我们实现更智能编程
前端·后端·ai编程
AntBlack6 小时前
不当韭菜V1.1 :增强能力 ,辅助构建自己的交易规则
后端·python·pyqt
bobz9657 小时前
pip install 已经不再安全
后端