Bean作用域和生命周期

目录

一、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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Spring框架中,Bean是指被Spring容器所管理的对象。当我们在Spring配置文件或注解中定义一个Bean时,这个Bean会经历一系列的生命周期阶段,包括以下7个阶段: 1. 实例化Bean对象:当Spring容器启动时,会根据配置文件或注解中的定义,创建Bean的实例。 2. 设置Bean的属性:Spring容器会自动将配置文件或注解中定义的属性值设置到Bean实例中。 3. 调用Bean的初始化方法:如果Bean实现了InitializingBean接口或在配置文件或注解中指定了初始化方法,Spring容器会在实例化和属性设置完成后调用Bean的初始化方法。 4. Bean已经可以使用:此时,Bean已经可以被其他对象所引用和使用。 5. 调用Bean的业务方法:在Bean被其他对象所引用和使用时,Spring容器会自动调用Bean的业务方法。 6. 调用Bean的销毁方法:如果Bean实现了DisposableBean接口或在配置文件或注解中指定了销毁方法,Spring容器在关闭时会自动调用Bean的销毁方法。 7. Bean被销毁:此时,Bean已经被Spring容器销毁,不再可用。 在Spring中,Bean的作用域定义了Bean实例的生命周期和使用范围。Spring框架提供了5种标准的作用域: 1. singleton:单例模式,一个Bean实例在整个应用程序中只创建一次。 2. prototype:原型模式,每次请求Bean时都会创建一个新的Bean实例。 3. request:每个HTTP请求都会创建一个新的Bean实例,在请求结束后,Bean实例就会被销毁。 4. session:每个HTTP会话都会创建一个新的Bean实例,在会话结束后,Bean实例就会被销毁。 5. global-session:在基于portlet的web应用中,每个portlet应用都会创建一个新的Bean实例,在portlet应用结束后,Bean实例就会被销毁。 通过定义Bean的作用域,我们可以控制Bean实例的生命周期和使用范围,从而更好地管理应用程序中的对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

吃点橘子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值