Spring Bean的作用域

 Spring是一个轻量级的开源应用开发框架,广泛应用于企业开发中,并且受到广大开发人员的喜欢。本篇只是针对spring中bean的作用域进行学习和总结。

   Bean作用域的分类

    bean的作用域分为五类:singleton ,prototype, request, session, global session 。

     Singleton 作用域

    此配置项是spring的默认项,也叫单例,在每个springIOC容器中一个bean定义对应一个对象实例,不同容器中不同。

    实验如下:bean配置如下

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_web应用

    bean的获取方式如下

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_web应用_02

结果如下:

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_spring_03

如果将如上配置改为下面:

<bean id="myBean" class="com.pactera.spring.TestSingleton"  scope="singleton"/> 则结果仍然与上面一致。

prototype 作用域

    该作用域表示每次从工厂中获取bean时,都会创建一个新的bean。

    本例实验我们用包自动扫描和注解得方式去实现bean的定义

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_web应用_04

开启包注解自动扫描

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_web应用_05

获取bean

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_web应用_06

运行后结果如下:

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_web应用_07

request 作用域

该作用于只有在Web应用中才会起作用。表示每个请求中会创建一个实例化对象。

我们需要搭建一个springWebMVC框架,并声明一个bean实现ApplicationContextAware用来获取容器中的bean。

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_作用域_08

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

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_作用域_09

MyStatus的注解:

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_spring_10

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

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_web应用_11

Session作用域

和request作用域一样,也是只有在web应用中才起作用。每个session中同一个实例,不同session不同实例。

bean注解声明作用域为session

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_spring_12

调用类

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_web应用_13

session过期时间设置为1分钟

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_spring_14

启动服务器后调用请求:

两次请求间隔超过1分钟的结果如图:

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_web应用_15

结果证明不同session中实例不同。

两次请求时间不超过1分钟结果如图:

Spring 支持的几种 bean 的作用域 spring中bean的作用域都有哪些_作用域_16

结果证明相同session中实例相同。

global session 作用域

此注解仅仅适用于portlet的web应用中,类似于http session。portlet web应用中的全局session可以被不同的portlet共享,同一个全局session中实例是同一个。由于不常用,所以不做代码层面的学习分析,仅作了解。

以上是对spring中bean的作用域的简单分析,后续会做源码分析。