浅谈Spring中Bean的作用域、生命周期
本文主要探究的是关于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的作用域、生命周期的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!