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吗?

浙公网安备 33010602011771号