Spring Bean作用域详解:从singleton到prototype
需积分: 14 96 浏览量
更新于2024-09-15
收藏 37KB DOC 举报
"本文详细介绍了Spring框架中bean的作用域,包括默认的singleton和prototype两种,以及Spring 2.0新增的session、request、global session三种Web应用程序上下文的作用域。此外,还提到了Spring 2.0对Bean类型的灵活扩展支持,允许用户自定义新的Bean类型。"
在Spring框架中,bean的作用域是指bean在ApplicationContext或WebApplicationContext中的生命周期和可见性。作用域的选择直接影响了bean的实例化次数和其生命周期管理。
1. singleton作用域
当bean的`scope`属性设置为`singleton`(或不设置,因为`singleton`是默认作用域)时,Spring容器会在初始化时创建一个唯一的bean实例,并将该实例存储在缓存中。每当其他bean需要依赖此`singleton` bean时,都会返回同一个实例。这与传统的设计模式中的单例不同,Spring的`singleton`作用域只保证在容器内部的单例,而不是全局的类加载器级别的单例。配置示例:
```xml
<bean id="role" class="spring.chapter2.maryGame.Role" scope="singleton"/>
或者
<bean id="role" class="spring.chapter2.maryGame.Role" singleton="true"/>
```
2. prototype作用域
`prototype`作用域的bean表示每次请求都会创建一个新的实例。这意味着,如果一个bean被声明为`prototype`,并且在其他bean中注入或通过ApplicationContext获取时,每次都会返回一个新的实例。这适用于需要多个实例或者具有独立状态的对象。配置示例:
```xml
<bean id="role" class="spring.chapter2.maryGame.Role" scope="prototype"/>
```
3. Web上下文作用域
- session:在Web环境中,`session`作用域的bean与HTTP会话关联。每个会话都拥有自己的一份bean实例,对于同一会话内的多次请求,将返回同一bean实例。
- request:`request`作用域的bean在每次HTTP请求中都创建一个新的实例。在一次请求中,所有对bean的引用都将返回同一个实例,但对不同请求来说,它们是独立的。
- global session:在基于portlet的应用中,`global session`作用域的bean与portlet的全局会话关联。在portlet应用中,全局会话跨越多个portlet实例,提供了一种共享数据的方式。
4. 自定义作用域
Spring 2.0引入了可扩展的bean作用域,允许开发者定义自己的作用域。这需要实现`Scope`接口并注册到Spring容器中。这样,用户就可以根据特定的应用需求创建新的bean生命周期和范围。
正确理解并选择bean的作用域对于优化Spring应用的性能和设计至关重要。选择合适的作用域可以帮助减少不必要的内存消耗,同时确保正确的对象实例化和状态管理。
2020-08-25 上传
2023-08-04 上传
2023-05-25 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2023-05-11 上传
点击了解资源详情
hj_bj
- 粉丝: 0
- 资源: 4
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫