Spring学习之一 bean的作用域 详细讲解

                             Spring Bean的作用域

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

   Bean作用域的分类

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

     Singleton 作用域

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

    实验如下:bean配置如下

Spring学习之一 bean的作用域 详细讲解_第1张图片

    bean的获取方式如下

Spring学习之一 bean的作用域 详细讲解_第2张图片

结果如下:

Spring学习之一 bean的作用域 详细讲解_第3张图片

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

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

prototype 作用域

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

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

Spring学习之一 bean的作用域 详细讲解_第4张图片

开启包注解自动扫描


获取bean

Spring学习之一 bean的作用域 详细讲解_第5张图片

运行后结果如下:

Spring学习之一 bean的作用域 详细讲解_第6张图片

request 作用域

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

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

Spring学习之一 bean的作用域 详细讲解_第7张图片

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

Spring学习之一 bean的作用域 详细讲解_第8张图片

MyStatus的注解:

Spring学习之一 bean的作用域 详细讲解_第9张图片

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

Spring学习之一 bean的作用域 详细讲解_第10张图片

Session作用域

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

bean注解声明作用域为session

Spring学习之一 bean的作用域 详细讲解_第11张图片

调用类

Spring学习之一 bean的作用域 详细讲解_第12张图片

session过期时间设置为1分钟


启动服务器后调用请求:

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

Spring学习之一 bean的作用域 详细讲解_第13张图片

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

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

Spring学习之一 bean的作用域 详细讲解_第14张图片

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

global session 作用域

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

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


    

    

    

    

你可能感兴趣的:(spring,springmvc,Java,bean,scope)