認識Robotlegs(二)注入高階

2022-07-30 22:03:22 字數 2970 閱讀 7404

規則

var injector:injector = new

injector();

var injectobj:injectobject = new

injectobject();

injector.mapvalue(injectobject, injectobj);

-----------------------[inject]

public

var injectpoint:injectobject;

上面的**實現了注入,當注入點需要乙個injectobject型別物件的時候,injector找到了injectobj這個物件並傳入到這個注入點。根據需求找到對應的物件,這就是注入規則(injectionconfig)。每個injector內部有一張規則對映表,請求標識為鍵,以對映物件為值的對映表。上述例子中injectobject是請求標識,injectobj是該標識的對映物件。mapvalue的意義就是在injector的規則表中增加一項注入規則。

swiftsuspenders提供的注入規則有:

mapvalue,mapclass,mapsingleton,mapsingletonof。

//

每次請求whenaskedfor時直接使用usevalue

mapvalue(whenaskedfor:class, usevalue:object, named:string = "")

//每次請求whenaskedfor時建立乙個新的instantiateclass例項

mapclass(whenaskedfor:class, instantiateclass:class, named:string = "")//

每次請求whenaskedfor時使用同乙個whenaskedfor例項(第一次使用時建立)

mapsingleton(whenaskedfor:class, named:string = "")

//每次請求whenaskedfor時使用同乙個usesingletonof例項(第一次使用時建立),多用於請求介面

mapsingletonof(whenaskedfor:class, usesingletonof:class, named:string = "")

限定

每個注入規則都有請求標識,請求標識以類或介面為標識之外還可以加上乙個限定符,swiftsuspenders最終以【類(介面)+限定符】作為唯一請求標識。

injector.mapvalue(injectobject, injectobj, "

myinjection

");

-----------------------[inject(name="

myinjection")]

public

varinjectpoint:injectobject;

//這樣的注入是成功的

這裡類injectobject和字串"myinjection"一起作為乙個注入規則的標識,而不是單單以injectobject為標識。以下兩種情況的注入是不會成功的。

injector.mapvalue(injectobject, injectobj); 

-----------------------[inject(name="

myinjection")]

public

varinjectpoint:injectobject;

//這樣的注入是不成功的

injector.mapvalue(injectobject, injectobj, "

myinjection

");

-----------------------[inject]

public

varinjectpoint:injectobject;

//這樣的注入是不成功的

繼承

注入器可以建立子注入器,子注入器除了可以新增屬於自己的注入規則之外它還會繼承父注入器的所有注入規則。

var injector:injector = new

injector();

var injectobj:injectobject = new

injectobject();

var rule1:injectionconfig =injector.mapvalue(injectobject, injectobj);

var childinjector:injector =injector.createchildinjector();

var rule2:injectionconfig = childinjector.mapvalue(injectobject, injectobj, "

child

");

injector擁有乙個注入規則rule1,而它的子注入器childinjector擁有rule2和rule1兩個注入規則。

下面給出乙個完整的範例來說明子注入器的注入規則。

package

}}package

}}package

}}

輸出injecteeclass created

injectobject created

injectobject created

執行結果顯示injecteeclass的兩個注入點都可以正常接收注入。 如果將

var instance:injecteeclass = childinjector.instantiate(injecteeclass);

換成

var instance:injecteeclass = injector.instantiate(injecteeclass);

執行時會報錯,因為第二個注入點不在injector的注入規則內。

認識高併發

這是lz第一次寫部落格,暫時以練筆為主,如內容有不足之處,請多多提出寶貴意見,本人將認真學習修改。高併發通常指的是同一時刻,有非常多的數量向伺服器請求資源,此刻伺服器承受巨大的壓力,這對於伺服器效能要求非常高,如超過了伺服器承受範圍,此刻往往出現宕機,像雙十一 618 春晚等秒殺場景,單位時間內的請...

依賴注入學習筆記(一)認識依賴注入

1 什麼是依賴注入 筆記摘要 所謂的 依賴 就是指在實現某個功能模組時需要使用另外乙個 或多個 元件 或 服務 那麼這個所需的 元件 或 服務 將被稱為 依賴 依賴注入 通過以構造函式引數,設值方法或屬性欄位等方式將具體元件傳遞給依賴方。以建構函式的方式注入 class user storage n...

sql注入原理及基本認識

sql注入簡介 所謂sql注入,就是通過把sql命令插入到web表單提交或輸入網域名稱或頁面請求的查詢字串,最終達到欺騙伺服器執行惡意的sql命令。具體來說,它是利用現有應用程式,將 惡意的 sql命令注入到後台資料庫引擎執行的能力,它可以通過在web表單中輸入 惡意 sql語句得到乙個存在安全漏洞...