Spring notes (1)

Spring Bean Scope

1. Singleton(default)
Spring容器创建一个该bean的实例,并放置在cache中。后续的请求将从该cache中取得bean的单一实例。

2. Prototype
每次请求都获得一个新的bean实例。

3. Request
只在实现 web-aware 的ApplicationContext 有用。例如 XmlWebApplicationContext
例如在Spring+Struts中,action bean对应的scope可以设置为 scope=”request”

4. Session
包含用户信息的bean的scope可以设置为 scope=”session”

5. Global Session
只针对portlet类型的web应用。

当我们需要在singleton scope的bean中引用 request/session之类的bean时,我们需要在scope=request/session的bean的定义中加入<aop:scoped-proxy/>,通过AOP为bean创建一个实现该bean所有接口的proxy,所有对该bean的调用都通过proxy实现。
原因:因为singleton类型的bean只被当前spring容器初始化一次,而当其被初始化时,request/session类型的bean还没有被创建。所有只有通过创建其proxy,让singleton类型的bean引用该proxy,proxy bean再从request或session中获取相应的bean,并将调用映射到其上.

<aop:scoped-proxy/> 需要CGLIB的支持,并且CGLIB只代理目标bean的公有方法。

如果我们只想依赖于JDK的基于接口的proxy实现,我们需要修改AOP的声明:
<aop:scoped-proxy proxy-target-class=”false”/>
注:被proxy的bean类至少有实现一个接口类。

此条目发表在未分类分类目录,贴了标签。将固定链接加入收藏夹。

留下评论