Spring Bean的作用域
Spring是一个轻量级的开源应用开发框架,广泛应用于企业开发中,并且受到广大开发人员的喜欢。本篇只是针对spring中bean的作用域进行学习和总结。
Bean作用域的分类
bean的作用域分为五类:singleton ,prototype, request, session, global session 。
Singleton 作用域
此配置项是spring的默认项,也叫单例,在每个springIOC容器中一个bean定义对应一个对象实例,不同容器中不同。
实验如下:bean配置如下

bean的获取方式如下

结果如下:

如果将如上配置改为下面:
<bean id="myBean" class="com.pactera.spring.TestSingleton" scope="singleton"/> 则结果仍然与上面一致。
prototype 作用域
该作用域表示每次从工厂中获取bean时,都会创建一个新的bean。
本例实验我们用包自动扫描和注解得方式去实现bean的定义

开启包注解自动扫描

获取bean

运行后结果如下:

request 作用域
该作用于只有在Web应用中才会起作用。表示每个请求中会创建一个实例化对象。
我们需要搭建一个springWebMVC框架,并声明一个bean实现ApplicationContextAware用来获取容器中的bean。

Controller层中要获取容器中的作用域声明为request的Bean.

MyStatus的注解:

运行服务器后两次请求http://localhost:8180/springMVC/test/hi.do(我的前端控制器中url-pattern配置的为*.do).日志结果显示如下:

Session作用域
和request作用域一样,也是只有在web应用中才起作用。每个session中同一个实例,不同session不同实例。
bean注解声明作用域为session

调用类

session过期时间设置为1分钟

启动服务器后调用请求:
两次请求间隔超过1分钟的结果如图:

结果证明不同session中实例不同。
两次请求时间不超过1分钟结果如图:

结果证明相同session中实例相同。
global session 作用域
此注解仅仅适用于portlet的web应用中,类似于http session。portlet web应用中的全局session可以被不同的portlet共享,同一个全局session中实例是同一个。由于不常用,所以不做代码层面的学习分析,仅作了解。
以上是对spring中bean的作用域的简单分析,后续会做源码分析。

本文详细介绍了Spring框架中Bean的五种作用域:singleton、prototype、request、session及globalsession,并通过具体示例展示了每种作用域的特点及应用场景。
1302

被折叠的 条评论
为什么被折叠?



