第四章 Spring.Net 如何管理您的类___对象的作用域

长平狐 发布于 2013/03/12 13:03
阅读 129
收藏 0

Spring.Net 中对象的作用域,就是描述对象的部署模式 ,Spring.Net 中对象可以通过两种模式布署:

① singleton(单例模式)

② 非singleton 也叫非单例模式(或者叫做 prototype,只是用在这里不是很合适)

当一个对象被定义为 singleton 时,容器中就只会有一个共享的实例,任何时候通过id或别名请求该对象都会返回这个共享实例的引用(也就是说这个对象只会被创建一次)。

当使用 非singleton,或者说原型模式布署时,每次请求对象都会创建新的实例。在某些场合,如果需要为每个用户返回单独的用户对象或其它对象,非singlton 布署模式就比较理想。Spring.Net 默认使用的是 单例模式( singleton ),即每次调用 factory.GetObject 方法时得到的都是一个实例。

如果没有显式指定, Spring.Net 中对象的布署模式默认为 singleton 。注意 非singleton(原型)模式 会使Spring.NET在每次请求对象时都创建新的实例,这也许并非是我们预期的行为。所以,除非绝对需要,否则不要使用原型模式。

设置对象的作用域,也称设置部署模式,需要使用到 singleton 属性,当 singleton 属性设置为 true 时,开启单例模式。singleton为 false 时,关闭单例模式。Spring.Net 默认为开启单例模式。

一 . 在设置为单例模式下:

Objects.xml为:

1 <? xml version="1.0" encoding="utf-8" ?> 2 < objects xmlns ="http://www.springframework.net" > 3 4 <!-- 通过默认的 singleton="true" (默认为单例模式,我们这里显示设置) --> 5 < object id ="hexu" type ="CnblogLesson_4_3.Model.Person,CnblogLesson_4_3" singleton ="true" > 6 < property name ="Id" value ="1" /> 7 < property name ="Name" value ="hexu" /> 8 < property name ="IsStudent" value ="false" /> 9 </ object > 10 11 </ objects >

由于前面 对象 使用了默认的 singleton="true",我们通过运行时监控变量来看一下 hexu1 和 hexu2 这两个对象是否是同一个引用。

通过运行时监视变量,可以看出 hexu1与 hexu2 对象的引用为同一个。

二 . 设置为 非单例模式 (singleton="false"):

Objects.xml为:

1 <? xml version="1.0" encoding="utf-8" ?> 2 < objects xmlns ="http://www.springframework.net" > 3 4 <!-- singleton="false" (设置为非单例模式) --> 5 < object id ="hexu_false" type ="CnblogLesson_4_3.Model.Person,CnblogLesson_4_3" singleton ="false" > 6 < property name ="Id" value ="2" /> 7 < property name ="Name" value ="hexu" /> 8 < property name ="IsStudent" value ="false" /> 9 </ object > 10 11 </ objects >

由于前面 我们手动对 对象 设置了 singleton="false"(非单例模式),我们通过运行时监控变量来看一下 hexu3 和 hexu4 这两个对象是否是同一个引用。

通过运行时监视变量,可以看出 hexu3与 hexu3 对象,虽然属性的值都是一样,但是他们的引用却不是同一个。

示例代码 : http://download.csdn.net/detail/cilence6788/5098736


原文链接:http://www.cnblogs.com/cilence/archive/2013/03/01/2938501.html
加载中
返回顶部
顶部