看
spring
原始碼的時間也有很長一段時間了,對其中
bean
的注入也有一定的了解。總想對這一段時間的學習經歷做出總結,又不知道從何處開始。也看了從主要脈絡開始寫,本人也看了計文柯老師編寫的《
spring
技術內幕》,覺得將的很生動,就是對於乙個剛學習的人來說有點深奧。想從一些基礎的東西開始慢慢的解釋
spring
的bean
spring
核心的人提供一些幫助。也希望各位老鳥看了之後提出寶貴的建議。 先從
spring
的bean
的屬性操作開始吧。 一
bean
的properties
的操作特性
1 properties
操作的整體的結構圖
這是我整理出來的
bean
相關屬性的操作介面圖。從這個圖中我們可以清晰的看出對於
bean
屬性相關操作的功能。在最上面的
propertyaccessor
介面提供了對於
bean
屬性的取值,賦值等基本的操作,並且定義了屬性常用的分割符「
.」,「
[」,「
]」等。
typeconverter
介面提供了在需要的情況下對一些型別的值,進行轉換和封裝。這些實際性的操作在我們給
bean
的賦值的時候都會用到。例如
在我們的引用中,我們有乙個屬性
start
是int
型別的,在
spring
的配置檔案中
給這個屬性賦
21的值。我們在這設定的是乙個字串型別的值,在
bean
的初始化的時候就需要同過實現
convertifnecessary
的方法將字元型串型別轉化成
int型別。
propertyeditorregistry
介面提供了一些對屬性編輯器註冊和查詢的方法。而這些方法的具體實現是在
propertyeditorregistrysupport
類中實現的。
configurablepropertyaccessor
介面只是繼承了上面的的三個介面。方便在後面實現類去做實現的時候只用去實現這個統一介面。同時也增加了在對屬性賦值的時候是否去提取他以前值的標誌介面
介面繼承了
configurablepropertyaccessor
介面,同時還新增了一些
bean
的型別,例項新增獲取等操作,從而完成了乙個
bean
物件的初步的服裝。
下面對這些介面的實現類做主要的分析。 u
propertyeditorregistrysupport
propertyeditorregistrysupport
的類實現了各種型別的的屬性的編譯器.
這個類裡面定義幾種型別的型別編輯器的儲存容器,是否啟用一些通用屬性的編輯器。 通過
getdefaulteditor
的方法來獲取預設型別的屬性的編輯器.在
defaulteditors
容器中儲存的是屬性的型別,各種型別的編輯器的。 通過
doregisterdefaulteditors
來註冊了
64中預設型別的編輯器。這些編輯器都是我們在編碼過程中常見的型別,例如
cahr,class,string
,list
等等。
private
void
doregisterdefaulteditors() }
/**
*copy
thedefault
editors
registered
inthis
instance
tothe
given
target
registry. *
@param
target
thetarget
registry
tocopyto
*/ protected
void
copydefaulteditorsto(propertyeditorregistrysupport target)
註冊乙個需要用到的屬性型別編輯器
這個方法需要兩個引數,屬性的型別和能對這個型別做出處理的屬性編輯器。他是通過
下面的方法的來實現主體註冊的
註冊共享的屬性編輯器
通過屬性的路徑或者屬性的型別來獲取屬性的編輯器
通過屬性的型別來獲取屬性的編輯器。 u
類是對bean
的封裝類的
的實現,主要是設定
bean
的屬性值,獲取
bean
的型別的等操作。
下面是例項化的
註冊預設的屬性編輯器,呼叫的是從
propertyeditorregistrysupport
中整合過來的。
獲取到某個屬性的
propertydescriptor,
主要是通過呼叫
getpropertydescriptorinternal
的方法來實現,這個方法是獲取到當前物件的
class
類的所有屬性的
propertydescriptor
快取容器,從容器中查詢當前的名稱的屬性的
propertydescriptor。
在上面的**中當
propertyname
是普通屬性的的名字(不包含
.)返回的是當前物件
this。
通過getpropertytype
方法可以獲取到指定屬性名稱的型別。
下面是獲取到具體屬性的值
我來具體的看下是怎麼通過屬性名稱來獲取擁有當前屬性的例項物件
.先判斷屬性名稱中有沒有包含
.當沒有包含的時候直接返回當前物件,當包含
.的時候例項化屬性名稱中包含的類
.
原始碼分析之LayoutInflater
簡介 inflate填充的過程 viewstub,merge,include的載入過程 layoutinflater系統服務的註冊過程 systemserviceregistry類有個靜態 塊,完成了常用服務的註冊,如下 static 註冊am registerservice context.act...
原始碼分析之HashMap
首先hashmap繼承了abstractmap,並且實現了map cloneable和serializable三個介面。cloneable和serializable是比較常規的兩個介面,在這裡並不作為重點。重點將會放在abstractmap和map兩個規範上。其中abstractmap是乙個抽象類,...
原始碼分析之String
先看屬性 底層是char陣列,一目了然 可以看到,value是儲存string的內容的,即當使用string str abc 的時候,本質上,abc 是儲存在乙個char型別的陣列中的。string底層的儲存結構是乙個字元型別的陣列,同樣也是被final修飾,因此一旦這個字元陣列被建立後,value...