浅谈Spring中Bean的作用域、生命周期

作者:best.lei 时间:2023-11-14 02:44:21 

本文主要探究的是关于Bean的作用域、生命周期的相关内容,具体如下。

Bean的作用域

Spring 3中为Bean定义了5中作用域,分别为singleton(单例)、prototype(原型)、request、session和global session,5种作用域说明如下:

1.singleton:单例模式,Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象。Singleton作用域是Spring中的缺省作用域,也可以显示的将Bean定义为singleton模式,配置为:

<bean id="userDao" class="com.ioc.UserDaoImpl" scope="singleton"/>

2.prototype:原型模式,每次通过Spring容器获取prototype定义的bean时,容器都将创建一个新的Bean实例,每个Bean实例都有自己的属性和状态,而singleton全局只有一个对象。根据经验,对有状态的bean使用prototype作用域,而对无状态的bean使用singleton作用域。

3.request:在一次Http请求中,容器会返回该Bean的同一实例。而对不同的Http请求则会产生新的Bean,而且该bean仅在当前Http Request内有效。

<bean id="loginAction" class="com.cnblogs.Login" scope="request"/> ,针对每一次Http请求,Spring容器根据该bean的定义创建一个全新的实例,且该实例仅在当前Http请求内有效,而其它请求无法看到当前请求中状态的变化,当当前Http请求结束,该bean实例也将会被销毁。

4.session:在一次Http Session中,容器会返回该Bean的同一实例。而对不同的Session请求则会创建新的实例,该bean实例仅在当前Session内有效。

<bean id="userPreference" class="com.ioc.UserPreference" scope="session"/>,同Http请求相同,每一次session请求创建新的实例,而不同的实例之间不共享属性,且实例仅在自己的session请求内有效,请求结束,则实例将被销毁。

5.global Session:在一个全局的Http Session中,容器会返回该Bean的同一个实例,仅在使用portlet context时有效。

Bean的生命周期

经过如上对Bean作用域的介绍,接下来将在Bean作用域的基础上讲解Bean的生命周期。

Spring容器可以管理singleton作用域下Bean的生命周期,在此作用域下,Spring能够精确地知道Bean何时被创建,何时初始化完成,以及何时被销毁。而对于prototype作用域的Bean,Spring只负责创建,当容器创建了Bean的实例后,Bean的实例就交给了客户端的代码管理,Spring容器将不再跟踪其生命周期,并且不会管理那些被配置成prototype作用域的Bean的生命周期。Spring中Bean的生命周期的执行是一个很复杂的过程,读者可以利用Spring提供的方法来定制Bean的创建过程。Spring容器在保证一个bean实例能够使用之前会做很多工作:

浅谈Spring中Bean的作用域、生命周期

浅谈Spring中Bean的作用域、生命周期

来源:https://www.cnblogs.com/zhanglei93/p/6231882.html

标签:spring,bean,生命周期,作用域
0
投稿

猜你喜欢

  • swing登录注册界面设计

    2023-11-24 17:27:21
  • java json 省市级联实例代码

    2021-11-13 18:50:35
  • c# winform异步不卡界面的实现方法

    2021-10-03 22:27:33
  • Android提高之多级树形菜单的实现方法

    2021-08-27 08:26:48
  • Java编程调用微信分享功能示例

    2022-10-16 06:39:49
  • java反射遍历实体类属性和类型,并赋值和获取值的简单方法

    2023-07-15 04:37:18
  • Java关于桶排序的知识点总结

    2023-12-06 03:18:04
  • MyBatis-Plus通过version机制实现乐观锁的思路

    2023-09-16 06:58:27
  • C#获取USB事件API实例分析

    2021-09-01 13:55:07
  • C#多线程开发实战记录之线程基础

    2022-11-03 03:21:45
  • Android实现毛玻璃效果的对话框

    2021-07-19 03:28:42
  • C# task应用实例详解

    2023-01-22 05:23:53
  • Java利用读写的方式实现音频播放代码实例

    2022-08-21 15:38:52
  • Mybatis Trim标签用法简单介绍

    2021-10-11 03:04:00
  • Java Springboot整合支付宝接口的教程详解

    2023-11-06 19:41:49
  • Android Camera+SurfaceView自动聚焦防止变形拉伸

    2023-06-18 06:35:54
  • Android学习教程之悬浮窗菜单制作(9)

    2022-03-27 08:17:13
  • 浅谈多线程中的锁的几种用法总结(必看)

    2021-12-23 08:05:55
  • Spring Task定时任务每天零点执行一次的操作

    2021-09-12 10:59:44
  • Android递归方式删除某文件夹下的所有文件(.mp3文件等等)

    2022-06-05 06:43:46
  • asp之家 软件编程 m.aspxhome.com