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

本文介绍了Spring.Net中对象的两种作用域:singleton(单例模式)与非singleton(非单例模式)。singleton模式下,容器中只有一个共享实例;非singleton模式下,每次请求都会创建新实例。默认为singleton模式。

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 对象,虽然属性的值都是一样,但是他们的引用却不是同一个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值