spring学习(四)—bean的作用域

本文详细介绍了Spring框架中Bean的作用域,包括singleton、prototype、request、session和globalsession等类型的特点及应用场景。此外还讲解了如何自定义作用域。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring的bean作用域最初只有singleton和prototype,spring2.0后又添加了request、session和global session类型,不过后面三种只能在web应用上使用。默认是singleton。scope的设置如下:

<bean id="scopeBean" class="..." scope="prototype">

1.singleton

  标记为singleton的对象在Spring容器中只存在一个实例,所有对该对象的引用将共享这个对象。并且几乎与容器拥有相同的寿命,从第一次被请求而初始化后,将一直存活到容器的退出。

2.prototype

  在拥有prototype的scope的bean定义,容器在接受到该类型的请求时都会每次重新生成一个新的实例。虽然这种类型的对象的实例化以及属性设置等工作都是由容器负责的,但是只要准备完毕,并且对象实例返回给请求方之后,容器就不再拥有当前返回对象的引用,请求方需要自己负责当前返回对象的后继生命周期的管理工作,包括该对象的销毁。也就是说,容器每次返回给请求方一个新的对象实例之后,就任由这个对象实例“自生自灭”了。

 3.request 

  XmlWebApplicationContext 会为每个HTTP请求创建一个全新的 RequestProcessor 对象供当前请求使用,当请求结束后,该对象实例的生命周期即结束了。当同时有10个HTTP请求进来的时候,容器会分别针对这10个请求返回10个全新的 RequestProcessor 对象实例,且它们之间互不干扰。从不是很严格的意义上说,request可以看作prototype的一种特例,除了场景更加具体之外,语意上差不多。

4.session

  Spring容器会为每个独立的session创建属于它们自己的全新的 UserPreferences 对象实例。与request相比,除了拥有session 的scope的bean的实例具有比request 的scope的bean可能有更长的存活时间,其他方面没什么差别。

5.globalSession

  global session只有应用在基于portlet的Web应用程序中才有意义,它映射到portlet的全局范围的session。如果在普通的基于servlet的Web应用中使用了这个类型的scope,容器会将其作为普通的session类型的scope对待。

6.自定义的scope

  要自定义scope必须实现org.springframework.beans.factory.config.Scope接口,该接口的定义如下:

public interface Scope {
    Object get(String name, ObjectFactory objectFactory);
    Object remove(String name);
    void registerDestructionCallback(String name, Runnable callback);
    String getConversationId();
}

  其中的get和remove方法必须实现。实现该接口后必须注册到容器后才能使用。通常使用ConfigurableBeanFactory的registerScope方法注册。如:

//threadScope类实现了Scope的接口
Scope threadScope=new ThreadScope();
ConfigurableBeanFactory.registerScope("thread",threadScope");
//然后bean可以使用名为thread类型的scope

  

转载于:https://www.cnblogs.com/liyuxinBlog/p/8379536.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值