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


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

  • 相关阅读:
    快速排序
    归并排序
    python module的结构
    HTTPResponse.read([amt]):只能read一次
    本地文件上传到远程服务器
    HTTP POST发消息
    64. 最小路径和-python
    322.零钱兑换-python
    把二叉树打印成多行 -python
    按之字形顺序打印二叉树 -python
  • 原文地址:https://www.cnblogs.com/hexu6788/p/2938501.html
Copyright © 2020-2023  润新知