日韩性视频-久久久蜜桃-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的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 91黄瓜| 美女黄色真播 | 欧美xxxx69| 开心激情网五月天 | 天堂中文在线看 | 色av一区二区三区 | 日本成人精品视频 | 欧美天堂一区 | 毛片黄色一级 | 91久久国语露脸精品国产高跟 | 欧美少妇一区二区 | 欧美专区 日韩专区 | 久久精品7| 美女操操操 | 成年人在线免费看 | 夜夜操操操| 69av视频在线观看 | 日日夜夜艹 | 亚洲色图激情小说 | 国产一级黄色大片 | 亚洲一区二区福利视频 | 国产精品视频在 | av在线网站观看 | 爱爱短视频 | 国产色a| 青青草久久久 | 亚洲精品中文字幕成人片 | 一边摸一边做爽的视频17国产 | 少妇福利在线 | 日韩亚州 | 免费av高清 | 国产一区999 | 亚洲va欧美 | 一本大道伊人av久久综合 | 涩涩成人网 | 97人人看| 中文字幕在线观看精品 | 亚洲欧美一区二区三 | 免费看黄色一级视频 | 超碰免费在 | 男男做爰猛烈叫床爽爽小说 | 色先锋在线 | 午夜影院免费版 | 奇米第四色7777 | 三级电影在线看 | www.色网 | 一级全黄裸体片 | 男人插女人免费视频 | 综合久久一区二区 | 中国黄色1级片 | 免费在线播放黄色片 | 91精品国产综合久久久久久久 | www.xxxx欧美| 久久久新| 欧美精品videosex极品 | 亚洲视频在线观看一区二区 | 精品日韩一区二区三区四区 | 无码任你躁久久久久久老妇 | 最新中文字幕在线视频 | 国产精品毛片av | 夜间福利在线观看 | 日韩欧美啪啪 | av天天射 | 国产亚洲精品久久久久动 | 中文一区视频 | 国产成人精品无码免费看在线 | 久热这里只有精品在线 | 国产精品97 | 欧美激情视频在线播放 | 中文字幕av一区二区三区谷原希美 | 熟妇无码乱子成人精品 | 亚洲日本久久久 | 中文字幕一二 | 成人在线精品 | 欧美tv| a级小视频 | 国产一区二区欧美日韩 | 久久精品亚洲精品国产欧美 | 无码任你躁久久久久久老妇 | 久久中文字幕电影 | 国产福利免费视频 | 免费高清视频在线观看 | 国产美女视频免费观看下载软件 | 欧美bbbbb性bbbbb视频 | 九九热精品在线 | 成人午夜精品一区二区 | ass大乳尤物肉体pics | jiizzyou欧美2 | 美女被男人c | 亚洲欧美变态另类丝袜第一区 | 亚洲你我色 | 色葡萄影院 | 韩国伦理电影免费在线 | 青青草在线视频免费观看 | 伊人精品一区二区三区 | 欧美区日韩区 | 91不卡在线 | 射影院 | 国产jizz18女人高潮 |