spring bean的作用域

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

1. singleton:单例模式

Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象。该模式在多线程下是不安全的。Singleton作用域是Spring中的缺省作用域,也可以显示的将Bean定义为singleton模式
备注:启动时加载;

2. prototype:原型模式

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

3. request:在一次Http请求中,容器会返回该Bean的同一实例。

而对不同的Http请求则会产生新的Bean,而且该bean仅在当前Http Request内有效,当前Http请求结束,该bean实例也将会被销毁。
备注:一次请求中,无论怎么跳转forward都只有一个bean产生

4. session:在一次Http Session中,容器会返回该Bean的同一实例。

而对不同的Session请求则会创建新的实例,该bean实例仅在当前Session内有效。同Http请求相同,每一次session请求创建新的实例,而不同的实例之间不共享属性,且实例仅在自己的session请求内有效,请求结束,则实例将被销毁。
备注:切换浏览器就会产生不同的bean

5. global Session:在一个全局的Http Session中,容器会返回该Bean的同一个实例

仅在使用portlet context时有效。
备注:使用时创建,这是和singleton唯一的区别

备注

都可以通过代码演示

遗留问题

spring中加了@Lazy的bean对象都是global Session吗?

posted @ 2024-11-21 20:53  是笨小孩儿  阅读(22)  评论(0)    收藏  举报