2008-10-23 85 views
20

我一直在使用的彈簧有一段時間了,但我一直想知道它是如何工作的,更具體的,他們是如何加載和編織只有一個接口或標記豆/班@註釋內幕等IoC容器

對於xml聲明,很容易看出spring如何預處理我的bean(它們是在Spring讀取的xml上下文中聲明的),但對於僅標註了註釋的類,我無法看到它是如何工作的,因爲我不會將任何代理傳遞給jvm左右。

我相信有一些Java/JVM掛鉤,讓您預處理類的某種標準,但我沒能發現任何東西的文檔。

有人可以指點我一些文檔嗎?這與java.lang.instrument.ClassFileTransformer API有關嗎?

回答

28

實際上,默認情況下,Spring不會爲 做任何字節碼後處理 既不用於XML-也不 註釋配置的bean。相反 相關咖啡豆包裝成動態 代理(見例如 java.lang.reflect.Proxy在 的Java SDK)。動態代理包裝使用 實際對象和攔截 方法調用,允許應用AOP 建議。區別在於代理實質上是由框架創建的新的人造類,而編織/字節代碼後處理則改變了現有的類。如果不使用你提到的Instrumentation API,後者是不可能的。

至於註釋,<context:component-scan>標籤的實現將使用Spring註釋掃描所有類的類路徑,併爲它們創建Spring元數據佔位符。之後,他們被視爲通過XML配置(或更具體地說,兩者都被視爲相同)。

雖然Spring沒有做字節碼後處理本身可以配置應該只是與Spring很好,如果代理不符合你的AspectJ織劑。

1

The Spring Framework download與源代碼捆綁在一起,因此您可以自行在代碼中(在src文件夾內)找到一個高峯來找出答案。

The reference manual也很長(588頁,如果你下載它as a PDF)。

+3

謝謝,但我一直在尋找的不是潛入春源的方式......但無論如何,PDF沒有提到春天的內部。 – 2008-10-23 18:24:02

+0

我不明白爲什麼這是downvoted! – 2014-11-14 21:35:30