欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-02-11 23:44:58
本文主要探究的是关于bean的作用域、生命周期的相关内容,具体如下。 bean的作用域   spring 3中为bean定义了5中作用域,分别为singleton(...

本文主要探究的是关于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的作用域、生命周期

总结

以上就是本文关于浅谈spring中bean的作用域、生命周期的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!