与 request 作用域一样,session 作用域只能使用在 Web 应用中 。我们可以使用 @SessionScope 将 bean 指定为 session 作用域,也可以使用 xml 配置方式:
2.6 globalSession作用域这个作用域就比较特殊了,globalSession 作用域的效果与 session 作用域类似,但是只适用于基于 portlet 的 web 应用程序中 。Portlet 规范定义了 globalSession 的概念,该概念在组成单个 Portlet Web 应用程序的所有 Portlet 之间共享(引用自 Spring 文档) 。说实话,在看到这里之前,我从来没听说过 portlet。我现在所学的,基本上都是基于 Servlet 的 web 应用程序,所有关于这个作用域,我也不理解 。但是 Spring 文档中有提到一点,那就是 如果我们在基于Servlet的web应用程序中使用globalSession作用域,实际上容器使用session作用域进行处理。
这个作用域也只在 web 应用中有效,上面也提过,具体是在基于 portlet 的应用中有效 。文档中只提出了一种使用方式,就是基于 xml :
2.7 application作用域学过 Servlet 的应该对 application 作用域有所了解,在 Servlet 程序中,有一个全局的 ServletContext 对象,这个对象被整个 web 应用所共享,我们可以通过 setAttribute 方法向其中添加全局共享的数据 。而 Spring 中,application 作用域就是这么实现的,作用域为 application 的 bean ,将会被作为 ServletContext 的属性,存储在其中,然后可以被全局访问,而且一个 ServletContext 只会存储这个 bean 的一个实例对象 。ServletContext 被销毁,这个 bean 自然也跟着被销毁 。我们发现,这好像有点类似于 singleton 这个作用域,确实非常类似,但是也有一些区别 。单例 bean 是一个 Spring 只会创建一个,而这里的却是每个 ServletContext 包含一个,不论有多少 Spring 容器,bean 的数量只取决于 ServletContext ,而且单例 bean 只能通过容器去获取,是隐式的,而这种作用域的 bean 却是公开的,存储在 ServletContext 中,可直接通过 ServletContext 获取 。
application 作用域也只能用于 web 应用中 。使用方式和之前几种类似,可以通过 @ApplicationScope 注解,也可以使用 xml 配置文件:
2.8 websocketwebsocket 是一种应用层的通信协议,它提供应用层的全双工通信,关于 websocket 协议,可以参考我的这篇博客: 计算机网络——简单说说WebSocket协议。而 Spring 提供对 websocket 协议的支持,于是就有了这么一个作用域 。在我看的这个 Spring 官方文档中,并没有对这个作用域进行详细描述,但是我们也可以通过名称推断出来 。若一个 bean 的作用域为 websocket ,则只作用于一次 websocket 通信,若连接被释放,则 bean 自然也会被销毁 。
2.9 单例bean依赖于多例bean在我们的应用程序中,可能有这样一种情况——一个作用域为 singleton 的 bean ,有一个或多个作用域为 prototype 的 bean ,此时将会发生什么问题 。对于单例 bean 来说,属性注入只会发生在创建这个 bean 的过程中,这也就意味着,单例 bean 只会经历一次属性注入 。也就是说,尽管这个单例 bean 的属性是多例的,但是由于只有一次注入,所以后续使用到的这个多例属性,永远都是同一个 。此时多例就失去了意义 。那该如何解决呢?
方法主要有两种,第一种比较容易想到,就是对于单例 bean 的多例属性,我们不让 Spring 容器帮我们自动注入,而是我们自己编写一个工厂方法,在方法中通过 getBean 等方式,手动地向容器请求这个多例 bean。由于 bean 是多例的,每一次 getBean ,实际上返回的都是一个新的实例对象 。而在单例 bean 需要用到这个多例 bean 时,通过工厂方法获取 。但是这种方式比较麻烦,也不利于维护 。
第二种方式就比较简单了,Spring 提供了一种机制解决这个问题,那就是—— 方法注入。可惜我也没有实际使用过,不太了解,感兴趣的可以自己去研究下,我这里就不提了 。后面如果了解了这一块的内容,再来更新吧 。
三、总结【浅析Spring中bean的作用域 bean有什么用】以上就对 Spring 中,bean 的作用域做了一个大致的介绍,至少我们知道了每一个作用域是什么,以及大致的功能,不会在被问到的时候,连是什么都不知道 。以上内容是我直接参考 Spring 官方文档所编写,文档中的内容也不是太详细,有些描述也不是特别清晰,所以上面有些是我自己的理解,若存在不足或者错误,欢迎指正,共同进步 。
- 快速学习周易有门径:“象”中暗藏的阴阳逻辑
- 【十二星座】从四月中旬开始,运势如虹,喜事接踵而来,会幸福的三大生肖
- 周易预测中国有望在2016里约奥运会取得好成绩
- vivo手机中的隐藏的黑科技 vivo的隐藏功能黑科技
- 又把毒蛇当宠物,沈阳男孩把竹叶青蛇当宠物养,喂食过程中被咬伤
- 在ks平台,情感主播是最受欢迎的,是中老年夕阳红的偶像,比如,四川可乐
- 玄中记手游委托任务通关攻略大全
- 假如美国彻底不卖中国手机芯片,谷歌不再向中国提供安卓系统,国产机会怎么样?
- 灌篮高手中锋实力排行榜前7名 灌篮高手中锋排行榜
- 【历史故事】1982年他来华访问,向中国买一样东西,被我们拒绝,从此再也没来