日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SwiftSuspenders 1.6 浅出深入 深入 2

發布時間:2025/7/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SwiftSuspenders 1.6 浅出深入 深入 2 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

類解讀

Injector

?????????Injector是整個SwiftSuspenders框架的核心。與開發者打交道最多的也就是Injector類。Injector就是注入器,其功能相當于Spring里的ApplicationContext。是IOC容器。簡單的理解可以將它理解為一個工廠,當開發者需要一個對象的時候,不是new出這個對象,而是通過Injector得到這個對象。Injector會自動完成返回的對象的依賴注入。

?????????Injector的私有屬性如下

屬性名

功能

INJECTION_POINTS_CACHE[static]:Dictionary

一個靜態屬性,緩存所有注入器的注入點描述。如果一個注入器通過xml來配置注入點,則不會和其他注入器共享注入點的緩存;如果不是通過xml來配置注入點,則會所有的注入器都共享注入點緩存,這也是基于性能的考慮。由于分析一個類的注入點需要通過describeType方法解析類的XML描述,如果兩個注入器會映射相同的類,那么只需要解析一遍就可以了。注意:這個變量緩存的是類的注入點(InjectionPoints)信息而非注入配置(InjectionConfig)。注入器之間是不共享注入配置信息的。如A1注入器已經映射過一次B類,如果A2注入器再映射B類時,就直接使用A1注入器映射過的B類的注入點信息而不需要自己再一次運算了。因為同一個類的注入點一定是相同的。

m_parentInjector : Injector

父注入器的引用

m_applicationDomain:

ApplicationDomain

注入器工作的應用程序域

m_mappings: Dictionary

存儲所有該注的注入配置(InjectionConfig)

m_injecteeDescriptions: Dictionary

存儲該注入器相關的的注入點描述。如果不是通過xml進行注入點配置的話,該屬性指向INJECTION_POINTS_CACHE,即所有的注入器共享類的注入點信息

m_attendedToInjectees: Dictionary

存儲已經注入過的對象。這樣在下一次請求時,就不需要再執行注入操作。以提升性能。

m_xmlMetadataXML

配置注入信息的XML文件。

?

?????????Injector公有方法如下

?

方法名

功能

Injector(xmlConfig : XML = null)

構造函數,初始化注入器的一些私有變量,如果是通過xml進行配置。就在參數里面寫入。這樣注入器就會設置為xml配置的模式。

mapValue(whenAskedFor : Class, useValue : Object, named : String = "") : *

值映射。將一個請求[類的全名+#+注入名]映射為一個已有的對象

mapClass(whenAskedFor : Class, instantiateClass : Class, named : String = "") : *

類映射,將一個請求[類的全名+#+注入名]映射為一個類。注意,被映射的類和請求的類可以毫無關系。

mapSingleton(

whenAskedFor : Class, named : String = "") : *

單例映射,將一個請求[類的全名+#+注入名]映射為該類的單例對象。

mapSingletonOf(

whenAskedFor : Class, useSingletonOf : Class, named : String = "") : *

單例類映射,將一個請求[類的全名+#+注入名]映射為另一個類的單例對象。注意,被映射的類和請求的類可以毫無關系。

mapRule(whenAskedFor : Class, useRule : *, named : String = "") : *

規則映射。將一個請求[類的全名+#+注入名]映射另一個注入配置的返回策略(個人覺得這個方法其實沒什么作用。還不如將第二個參數設為自定義的InjectionResult。這樣還可以增加可擴展性)

getMapping

(whenAskedFor : Class, named : String = "")

根據請求獲得相應的注入配置。如果已有相應的注入配置,直接從mappings緩存里面返回,如果沒有,則會新建一個相應的注入配置。然后保存在mapping中。

injectInto(target : Object):void

向目標對象進行依賴注入。(只包括屬性注入和方法注入)。構造函數注入在生成目標對象時就已經完成了。

instantiate(clazz:Class):*

實例化一個類。會通過構造函數注入方法新建這個類,然后調用injectInto方法完成這個對象的依賴注入。最后返回完成注入的對象。

unmap(clazz : Class, named : String = ""):*

解除一個映射。內部只是將該映射的InjectionConfig的返回策略設為空。(個人認為應該還需要將mapping里面的引用刪掉)

hasMapping(clazz : Class, named : String = '') : Boolean

根據一個請求檢測是否存在相應的注入配置(InjectionConfig)

getInstance(clazz : Class, named : String = '') : *

根據請求返回相應的實例。該實例已經完成所有的依賴注入。

createChildInjector(applicationDomain:ApplicationDomain=null) : Injector

創建子注入器

setApplicationDomain(applicationDomain:ApplicationDomain):void

設置注入器的應用程序域

getApplicationDomain():ApplicationDomain

獲得注入器的應用程序域

setParentInjector(parentInjector : Injector)

設置注入器的父注入器

getParentInjector() : Injector

獲得注入器的父注入器

purgeInjectionPointsCache()

清除注入點緩存。

?

?????????Injector包內方法如下:

方法名

功能

getAncestorMapping(

whenAskedFor : Class, named : String = null) : InjectionConfig

自下而上依次從父注入器獲得請求的注入配置。直到找到為止。注意:只會尋找離當前注入器最近的注入配置。如A的父注入器是BB的父注入器是CBC有相同請求名的注入配置。那么A只會使用B的注入配置。

get attendedToInjectees() : Dictionary

獲得所有已經住如過的對象。

?

?????????Injector的私有方法如下:

方法名

功能

getInjectionPoints(clazz : Class) : InjecteeDescription

獲得一個類的注入描述(InjecteeDescription)。這個注入描述中包含了這個類所有的注入點信息。通過describeType方法獲得這個類的XML表示。然后查找包含Inject元數據和PostConstruct元數據的節點來配置相應的注入點。最后封裝到InjecteeDescription對象中

getConfigurationForRequest(clazz : Class, named : String, traverseAncestors : Boolean = true) : InjectionConfig

根據請求返回相應的注入配置(InjectionConfig)traverseAncestors決定是會從父注入器中查找。

createInjectionPointsFromConfigXML(description : XML)

xml中配置注入點信息。大體的流程是首先清除原來類中的所有元數據信息,然后根據配置的xml,重新添加新的元數據信息。

addParentInjectionPoints(description : XML, injectionPoints : Array) : void

從父類中找到注入點,然后添加進子類的注入點描述當中。因為子類也應該繼承父類的注入點信息。

?

?????????Injector包外類:InjecteeDescription

InjecteeDescription描述了一個類的注入點信息。內含兩個公有屬性:

屬性名

功能

Ctor:InjectionPoint

構造函數注入點

injectionPoints?:Array

屬性,方法和PostConstruct注入點

?

轉載于:https://www.cnblogs.com/tankaixiong/archive/2012/12/10/2811099.html

總結

以上是生活随笔為你收集整理的SwiftSuspenders 1.6 浅出深入 深入 2的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。