Spring速查手册(二)——Bean的作用域

Bean的四种作用域

  • 单例(Singleton):整个应用中,只创建一个bean。
  • 原型(Prototype):每次注入或请求要给bean的时候都创建一个新的bean。
  • 会话(Session):每个session创建要给bean。
  • 请求(Request):每个WEB请求创建一个bean。

PS:Spring默认的bean是单例的!

使用会话/请求作用域的注意点

// 创建一个session的bean
@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION)
public A a{ …… }

// 在单例bean中注入不同作用域的bean
@Component
public B b{
    @Autowired
    public void setA ( A a ) { …… }
}

上述代码会发生错误! 单例的bean在应用程序启动的时候就初始化,并在初始化时需要注入session作用域的B,但session作用域的bean只有当有用户的时候才创建,初始化的时候并没有该对象。 再者,不同的用户拥有不同的session,因此A对象将有成千上万,而B对象有且仅有一个。 此时需要在session作用域的bean对象上加上注解:

// 创建一个session的bean
@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION,
proxyMode=ScopeProxyMode.INTERFACES)
public A a{ …… }

该注解声明后,注入给单例的将是该bean的代理,代理维护着不同session下的bean,当单例对象调用的将是代理对象,代理对象根据当前的session将请求转发给制定的目标对象处理。

注意:若session作用域的对象无接口,则使用Cglib创建代理

// 创建一个session的bean
@Component
@Scope(value=WebApplicationContext.SCOPE_SESSION,
proxyMode=ScopeProxyMode.TARGET_CLASS)
public A a{ …… }

在XML中开启对象代理

<!-- 开启java动态代理-->
<bean id="xxx" class="com.xxx.xxx" scope="session">
    <aop:scoped-proxy />
</bean>
<!-- 开启Cglib代理-->
<bean id="xxx" class="com.xxx.xxx" scope="session">
    <aop:scoped-proxy proxy-target-class="false" />
</bean>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏个人分享

Spring技术揭幕----DispatcherServlet

Spring MVC是一个MVC模式的实现。在Spring MVC的使用中,需要在web.xml中配置DispatcherServlet,也就是说其核心是一个S...

824
来自专栏程序猿DD

Spring Boot中Web应用的统一异常处理

我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射: /error,当处理中抛出异常之后,会转到该请求...

2606
来自专栏Golang语言社区

GO语言标准错误处理机制error用法实例

本文实例讲述了GO语言标准错误处理机制error用法。分享给大家供大家参考。具体分析如下: 在 Golang 中,错误处理机制一般是函数返回时使用的,是对外的接...

3329
来自专栏Java成神之路

Spring_总结_03_装配Bean(二)之Java配置

上一节提到,装配Bean有三种方式,首先推荐自动装配。当自动装配行不通时,就需要采用显示配置的方式了。

693
来自专栏技术小讲堂

ASP.NET AJAX(7)_Microsoft AJAX Library扩展客户端组件继承时需要注意的问题扩展类型如何修改已有类型

首先,延续上一讲的内容,谈一下客户端面向对象类型系统中事件的使用 在C#中定义的一种方式 public class WorkEventArgs:EventArg...

2506
来自专栏行者常至

(04)Struts2_helloWorld

291
来自专栏Java学习网

Java Web中JSP中6种动作概况知识点总结——每日一语法学习

JSP动作利用XML语法格式的标记来控制Servlet引擎的行为。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Jav...

3424
来自专栏Android 研究

Android插件化基础1-----加载SD上APK

大致的意思是: ClassLoader 是一个负责加载classes的对象,ClassLoader类是一个抽象类,需要给出类的二进制名称,ClassLoader...

763
来自专栏大内老A

ASP.NET MVC以ValueProvider为核心的值提供系统: DictionaryValueProvider

NameValueCollectionValueProvider采用一个NameValueCollection作为数据源,DictionnaryValuePro...

1838
来自专栏跟着阿笨一起玩NET

.net如何自定义config配置文件节点

本文转载:http://www.cnblogs.com/lori/archive/2013/04/03/2997617.html

261

扫描关注云+社区