1. 程式人生 > >3. 延遲例項化物件

3. 延遲例項化物件

在預設情況下,程式一開始就會把配置檔案中的所有物件都進行例項化。

為了驗證這一點,我們可以只在Main方法裡只寫獲取上下文,不寫GetObject。

        static void Main(string[] args)
        {
            IApplicationContext context = ContextRegistry.GetContext();
            Console.ReadLine();
        }

可以看到控制檯列印了 "建立了A的例項",說明執行了A的構造方法,建立的A的例項。

如果配置檔案裡面有大量的物件,程式一開始建立大量物件的例項,無疑會造成程式啟動緩慢。

這個時候可以採用延遲例項化物件的方法,將不必要在一開始就例項化的物件放到需要用到的時候再去例項化。

為了對照說明,再建立一個類B

namespace namespaceA
{
    public class A
    {
        public A()
        {
            Console.WriteLine("建立了A的例項");
        }
    }

    public class B
    {
        public B()
        {
            Console.WriteLine("建立了B的例項");
        }
    }
}
在物件XML檔案中加上物件b的定義,並且加上lazy-init="true"的屬性
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net">
  <object name="a" type="namespaceA.A, ConsoleApplication1" />
  <object name="b" type="namespaceA.B, ConsoleApplication1" lazy-init="true" />
</objects>

在Main方法中驗證,獲取上下文之後,做一個控制檯輸入的分割。 可以看到程式一開始只例項化了a,按下回車,執行到GetObject時,物件b才被建立。

        static void Main(string[] args)
        {
            IApplicationContext context = ContextRegistry.GetContext();

            Console.ReadLine();

            B b = context.GetObject("b") as B;

            Console.ReadLine();
        }




相關推薦

3. 延遲例項物件

在預設情況下,程式一開始就會把配置檔案中的所有物件都進行例項化。 為了驗證這一點,我們可以只在Main方法裡只寫獲取上下文,不寫GetObject。 static void Main(string[] args) {

python中如何統計一個類的例項物件

類中的靜態變數 需要通過類名.靜態變數名 來修改 ;通過物件不能修改 python中如何統計一個類的例項化物件?? 1 class Person: 2 #靜態變數count,用於記錄類被例項化的次數 3 count = 0 4 5

2018-10-15 例項物件 Instantiate與銷燬遊戲物件GameObject.Destroy

  GameObject.Instantiate(Object, Vector3, Quaternion, transform.parent); Quaternion[四元數]:例項化後物件的旋轉情況 Quaternion.identity:無旋轉   &nb

collection.namedtuple例項物件

from collection import namedtuple # human = namedtuple('human', ['name', 'height', 'age', 'sex']) h = human('James', 180, 32, 0) # then you can use h.na

根據字串的形式,自動匯入模組並使用反射找到模組中的類,並例項物件,利用importlib和getattr實現的

例如: auth資料夾下一個SCRF.py檔案,裡面有一個Cors類 class CORS(object): def process_request(self): print('666') auth資料

java反射例項物件

-Class類Java中手動建立的每一個類,在編譯後JVM都會為其建立一個Class類物件,在這個Class類物件中儲存了所建類的資訊。可通過Class類提供的方法為一個類例項化物件,區別與new關鍵字建立物件,前者是在類已經編譯好的情況下,通過指定類名來建立例項化物件,後者

jsp呼叫javaBean方式一(new例項物件)

   1:javabean package cn.mldn.lxh.demo; /**  * javaBean 留給JSP呼叫  *   * @author Administrator  *   */ public class SimpleBean {private Str

java內部類例項物件

package com.lzcc.oop.testpolymorphism; /** * 多型測試 * * @author 包子 * */ public class Person {

c#中用反射的方式例項物件

定義一個類: namespace Example { public class ExampleClass {  public int iID = 0;  public string strName = "";  public ExampleClass()  {   iID

反射機制--獲取例項物件

在上一節中(點選開啟連結),獲取到了位元組碼檔案物件,那麼如何獲取該位元組碼檔案對應的Person物件呢?(仍然使用在text包下定義的Person類。) 執行早期的方法: package text; public class ReflectDemo2 { publ

Spring-Bean的3例項

構造器例項化 bean1.java package cn.itcast.instance.constructor; public class Bean1 { } InstanceTest1.java package cn.itcast.instance.constructo

js中 建構函式,原型,和例項物件

1,建構函式建立物件造成的記憶體浪費,和原型的引入 function Person(name,age){ this.name = name; this.age = age; this.introduce = function

介面和抽象類不能例項物件

ArrayList points = new ArrayList(); Iterator i = points.iterator(); points是ArrayList的物件,用points.iterator轉換成迭代器的形式也就是i物件; i是Iterator的引用

MINE筆記-面向物件程式設計,原型鏈的理解,建構函式,原型物件例項物件,prototype 運用

// to do list 建立建構函式,例項化物件,來做面向物件程式設計 // 建立建構函式--原型函式(原型物件) function person(name,age,id){ this.name = name; this.age = age; this.id =id // c

建構函式是什麼,有什麼作用,例項物件,面向物件分析

js裡的面向物件分析-(建立例項化物件) ECMAScript 有兩種開發模式:1.函式式(過程化),2.面向物件(OOP)。面向物件的語言有一個標誌,那就是類的概念,而通過類可以建立任意多個具有相同屬性和方法的物件。但是,ECMAScript 沒有類的概念,因此它的物件也與基於類的語言中的物件

python 根據類名例項物件

方法一: class obj(object):        pass   a = eval('obj()') 方法二: 如果是經常需要這樣可以 #將用來建立物件的字串預編譯成code物件. create_obj = compile('obj()',

C++只在棧或堆上例項物件

C++如何讓類物件只能在堆(棧)上分配空間 一般情況下寫一個類都是可以採用new在堆上分配空間,或直接採用 類名+物件名 的方式在棧上分配空間。但有時候,如果想讓一個類只能在棧上或者堆上分配空間,又該怎麼實現呢? 下面分別來介紹如何定義只能在棧上或堆上例項化

Delphi根據字串例項物件

我們可以通過ClassRegistry單元的TClassRegistry類很輕鬆的根據字串創建出物件。 下面是該類幾個主要函式的說明: Code// 獲取TClassRegistry自身的單例引用classfunction GetClassRegistry: TClassRe

java 類的建立,如何通過類例項物件

一、 1.建立的類名要大寫。例如Person類,P要大寫。 2.編寫類的屬性,即成員變數。注意屬性對應的資料型別,一般類似身份證號的資料型別都用String。 2.構造方法。當你不寫構造方法時,系

IOS延遲例項

這該死的程式碼片斷怎麼不好使了?搞了N次了 IOS延遲例項化,是在IOS開發中經常用到的一種方式. 假設我們定義有屬性: @property (nonatomic, strong) NSMutableData *webData; 並對其展開,以自動生成setter和ge