Bean作用域和生命周期

文章详细介绍了Spring中Bean的作用域,包括单例、原型等不同模式及其应用场景,并解释了如何使用@Scope注解设置Bean作用域。此外,还概述了Spring的执行流程和Bean的生命周期,从实例化到销毁的各个阶段。
摘要由CSDN通过智能技术生成

目录

一、Bean的作用域

1.1 Bean作用域的定义

1.2 Bean作用域的分类

1.3 如何设置Bean作用域

二、Bean的生命周期 

2.1 Spring的执行流程

2.2 Bean的生命周期


一、Bean的作用域

1.1 Bean作用域的定义

限定程序中变量的可作用范围叫做作用域

Bean的作用域是指Bean在Spring整个框架中的某种行为模式,比如单例作用域模式,就是指Bean对象在整个Spring中只有一份,当A修改Bean对象后,B读取到的Bean对象就是修改后的Bean。

1.2 Bean作用域的分类

Spring在初始化一个Bean对象的同时,会指定它的作用域。Spring有6种作用域,后4种是基于Spring MVC生效的。

(1) singleton:单例作用域

描述:该作用域下的Bean在Spring中只存在一个实例,Spring默认情况是单例作用域。

场景:当Bean对象的属性状态不需要更新时(无状态)使用该作用域。

(2) prototype:原型作用域(多例作用域)

描述:相对于单例作用域,每次对该作用域下的Bean对象的请求都会创建新的实例。

场景:适用于有状态的Bean。

(3) request:请求作用域

描述:每次http请求会创建新的Bean的实例。

场景:一次http请求和响应的共享Bean。

(4) session:会话作用域

描述:每个会话会创建新的Bean的实例。

场景:用户会话的共享Bean,例如登录信息。

(5) application:全局作用域

描述:在一个http servlet context中创建一个Bean

场景:Web应用的上下文信息,例如一个应用的共享信息。

(6) websocket:HTTP WebSocket作用域

描述:在⼀个HTTP WebSocket的⽣命周期中,定义⼀个Bean实例。

场景:WebSocket的每次会话中,保存了⼀个Map结构的头信息,将⽤来包裹客户端消息头。第⼀ 次初始化后,直到WebSocket结束都是同⼀个Bean。

单例作用域和全局作用域的区别

(1) singleton是Spring Core中的作用域;application是Spring Web中的作用域。

(2) singleton作用于IoC容器;application作用于Servlet容器。

1.3 如何设置Bean作用域

使用@Scope注解就可以用来设置Bean的作用域,@Scope既可以修饰方法也可以修饰类,使用@Scope设置Bean作用域的两种方式:

(1) @Scope("prototype")

(2) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

二、Bean的生命周期 

在认识Bean的生命周期之前,需要先了解Spring的执行流程:

2.1 Spring的执行流程

(1) 启动项目;

(2) 读取配置文件,初始化Bean;

        a) 使用xml直接注册的Bean;

        b) 配置Bean的根扫描路径。

(3) 把Bean对象存储到Spring中,通过类注解进行扫描和装配;

(4) 从Spring中读取Bean,装配到相应的类中。

2.2 Bean的生命周期

生命周期是指一个对象从诞生到销毁的整个生命过程。

Bean的生命周期分为以下5个部分:

(1) 实例化Bean

将字节码文件读取到内存中,为Bean分配内存空间。

(2) 设置属性

如果当前Bean对象所在的类中注入了其他的Bean,就要先实例化其他的Bean,才能继续进行当前Bean的初始化工作。

(3) 初始化Bean

        a) 执行实现了各种Aware通知的方法,如BeanNameAware;

        b) 执行初始化的前置方法;

        c) 执行初始化方法(@PostConstruct、指定的init-method方法);

        d) 执行初始化的后置方法。

(4) 使用Bean。

(5) 销毁Bean。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃点橘子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值