`

Spring-bean作用域

 
阅读更多

一、Spring Framework支持五种作用域

 

1、singleton : 一个bean定义对应一个对象实例 (spring容器缺省作用域)

2、prototype : 一个bean定义对应多个对象实例 (对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用singleton作用域,Dao不会被配置成prototype,应该是无状态的singleton

 

3、request: 在一次http请求中,一个bean定义对应一个实例,即每次http请求将会有各自得bean实例,它们依据某个bean定义创建而成。该作用域仅在基于web的spring applicationcontext情形下有效。

4、session : 在一个http session中,一个bean定义对应一个实例。该作用域仅在基于web的spring applicationcontext 情形下有效

5、global session :在一个全局的http session中,一个bean定义对应一个实例 

 

二、web使用的作用域

1、Request作用域 :在当前http request内有效,当请求结束后,request作用域的bean实例将销毁

2、Session作用域  :在当前http Session内有效

3、global session作用域 : 仅仅在基于portlet的web应用中才有意义

 

三、作用域bean与依赖

1、能够在HTTP request或者Session(甚至自定义)作用域中定义bean固然很好,但是Spring IoC容器除了管理对象(bean)的实例化,同时还负责协作者(或者叫依赖)的实例化。如果你打算将一个Http request范围的bean注入到另一个bean中,那么需要注入一个AOP代理来替代被注入的作用域bean。也就是说,你需要注入一个代理对象,该对象具有与被代理对象一样的公共接口,而容器则可以足够智能的从相关作用域中(比如一个HTTP request)获取到真实的目标对象,并把方法调用委派给实际的对象

 

2、xml配置文件中,要创建一个作用域bean的代理

     

<beans xmlns="http://www.springframework.org/schema/beans"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xmlns:aop="http://www.springframework.org/schema/aop"

  xsi:schemaLocation="

  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

 

  http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

 

<aop:scoped-proxy/>

 

 

3、参考文档

http://www.xuehuile.com/blog/14f393edfeb24c259caaf5cf762ceb1d.html

      http://blog.arganzheng.me/posts/spring-bean-scopes.html

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics