依赖注入及AOP简述(九)——单例和无状态Scope .
三、依赖注入对象的Scope及其生命周期
在前面的章节我们讲到,依赖注入容器之所以能够区别于以往的ServiceLocator等容器,是在于其不但能够自动构建多层次的、完整的依赖关系图,并且可以管理依赖对象的Scope和对其进行行为增强。有关行为增强的话题我们会在下一章介绍,这里我们先来看看有关依赖对象的Scope及其生命周期管理的话题。
1. 依赖注入对象的Scope
Scope,即作用域,是指面向对象开发中所设计的某一类对象的生存期间。我们先从普通Java程序开发中最常用的单例和无状态两种Scope入手,之后再来讨论Web应用程序开发中几种常见的Scope。
1.1. 单例和无状态Scope
无状态Scope是最简单、生存期间最短的一种Scope,我们所有通过new出来的非静态对象都属于这种Scope,它随着使用这个对象的对象(可能是依赖者类,也可能是依赖者类里的一个方法)的消亡而消亡。反之,单例则是生存期间最长的一种Scope,它以静态的模式生存在JVM的“旧年代区域”,永远不会被JVM回收。比如我们肯定都写过或使用过类似这样的单例模式:
|
还用我们取款的例子来说,假设这个储户用的存折类型是定期存单,取款之后银行要收回定期存单,这种情况下对于每一次取款的存折依赖来说,它都是一个无状态的,也就是说每次取款都需要一个新的存折,因此这个时候存折就是一个无状态的依赖。我们再假设这个储户附近只有一所银行,也就是说不管什么时候去取款都会去同一所银行,此时银行就是一个单例的依赖,每次执行withDraw方法是都是使用的同一个银行依赖对象。
在依赖注入框架之前,我们对于无状态的存折依赖和单例的银行依赖的创建,可能会分别使用new和静态的方式。new方式的诸多问题我们已经在第一章讨论过了。而静态的方式同样有着开发者负担管理JVM全局变量的不便或是易造成内存泄漏等诸多问题。依赖注入框架可以帮助开发者管理这些Scope的依赖,使得开发者获取不同Scope的依赖对象变得非常简单并且不需要自己去维护它。
下面我们以Seam框架为例说明如何定义这两种Scope。Spring、Guice框架也具有极为类似的定义方式,就不再具体举例了。
|
注意在依赖注入框架中,所谓“单例”并不是传统意义上的单例,它不是JVM中唯一存在的一个静态变量,而是以依赖注入容器(Injector)为单位唯一存在的非静态变量,从而避免了过多占用JVM的旧年代区域的内存等问题。
依赖注入及AOP简述(九)——单例和无状态Scope .的更多相关文章
- 依赖注入及AOP简述(十)——Web开发中常用Scope简介 .
1.2. Web开发中常用Scope简介 这里主要介绍基于Servlet的Web开发中常用的Scope. l 第一个比较常用的就是Application级Scope,通常我们会将一 ...
- 依赖注入及AOP简述(三)——依赖注入的原理
3. “依赖注入”登场 于是诸多优秀的IT工程师开始想出了更加轻量便利.更加具有可测试性和可维护性的设计模式——IoC模式.IoC,即Inversion of Control的缩写,中文里被称 ...
- 依赖注入及AOP简述(十二)——依赖注入对象的行为增强(AOP) .
四.依赖注入对象的行为增强(AOP) 前面讲到,依赖注入框架的最鲜明的特点就是能够提供受容器管理的依赖对象,并且可以对对象提供行为增强(AOP)功能,所以这一章我们来讨论有关AOP的话题. 1. ...
- 依赖注入及AOP简述(五)——依赖注入的方式 .
二.依赖注入的应用模式 前面我们了解了依赖注入的基本概念,也对一些依赖注入框架进行了简单的介绍,这一章我们主要来讨论作为开发者如何利用依赖注入框架来实现依赖注入的设计思想. 1. 依赖注入的方 ...
- 依赖注入及AOP简述(一)——“依赖”的概念 .
一.入门:依赖注入 作为一种全新的设计模式理念,“依赖注入”这个词汇在软件设计开发中已经是越来越耳熟能详了,而各种流行于开源社区的“依赖注入框架”,也越来越多的被当作软件工程开发过程中使用的基础框架. ...
- 依赖注入及AOP简述(十三)——AOP应用举例(完结) .
2. AOP应用举例 在一般的应用程序开发中,有一些典型的AOP应用,使得开发者可以专注于业务逻辑本身,而不是与之完全无关的一些“方面”. l 首先就是关于前面介绍过的日志输出类 ...
- 依赖注入及AOP简述(七)——FQCN请求模式
2.2. FQCN请求模式 为了弥补纯字符串请求模式中的类型安全问题,全类名(FQCN)请求模式就应运而生了.其思想便是,在向容器请求依赖对象的时候,不是通过字符串的标识符.而是通过被请求的依赖 ...
- 依赖注入及AOP简述(六)——字符串请求模式 .
2. 依赖注入对象的请求模式 前一节我们讨论了关于声明注入点的几种方法,这一节主要来介绍在注入点上如何定位到所需要的标识符的话题.基本上,我们可以用字符串为标识符来请求依赖对象.或者用全类名( ...
- 依赖注入及AOP简述(四)——“好莱坞原则”和依赖注入框架简介 .
3.2. “好莱坞原则” 看了前面关于依赖注入概念的描述,我们来提炼出依赖注入的核心思想.如果说传统的组件间耦合方式,例如new.工厂模式等,是一种由开发者主动去构建依赖对象的话,那么依赖注入模 ...
随机推荐
- 二分图带权最大独立集 网络流解决 hdu 1569
方格取数(2) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- java Socket使用注意
Socket s = new Socket(ia, port); BufferedOutputStream bufOut = new BufferedOutputStream(s.getOutputS ...
- UGUI 锚点
今天我们来学习下UGUI的锚点, 他是做什么的呢? 基本上就是用于界面布局. 1. 1个控件对应1个描点. 2. 描点分成四个小叶片, 每1个叶片 对应 控件四边框的角点 3. 不管屏幕如何放大缩 ...
- 淘宝开源任务调度框架tbschedule
背景 分布式任务调度是非常常见的一种应用场景,一般对可用性和性能要求不高的任务,采用单点即可,例如linux的crontab,spring的quarz,但是如果要求部署多个节点,达到高可用的效果,上面 ...
- [记录]关于vertical-align单/多选框与说明文字对齐效果
效果图: 第一张使用label标签,第二张没有使用.. 使用label标签,middle对齐方式的单选框下降了1px 而没有使用label标签,sub对齐方式的 却 居 中 了 =_= 不太理解 ...
- C#自定义控件在添加引用后不显示在工具箱的解决方法
先说一些背景: 在开发C#项目时,发现很多控件存在复用的情况,控件的属性都是要设置成一样的,我就想,能不能设置一个类来存放这个控件,这样我每次用的时候直接加一些特殊的操作就可以了,不需要再次设置控件属 ...
- Android studio教程:[3]修改背景主题
android studio开发环境的背景主题是可以更改的,现在都流行黑色背景,这样让软件显得更高端大气的,更加赏心悦目,但最主要的还是看起来更舒适更顺眼.下面就教大家如何更改背景主题. 工具/原料 ...
- Java的动态代理机制详解(转)
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的 ...
- 【转】VS2010中文注释带红色下划线的解决方法
转载自:http://blog.csdn.net/whatday/article/details/7856323 环境:Visual Studio 2010 问题:代码中出现中文后会带下划线,很多时候 ...
- QTestLib Tutorial
本学习指南介绍了如何使用QTestLib框架的一些特性,分为4章: 编写一个单元测试程序 数据驱动测试 模拟GUI事件 重复GUI事件 第一章 编写一个单元测试程序 文件列表: qtestlib/tu ...