2011-09-21 65 views
5

我有一個基於Spring 2.x的大型應用程序,有幾百個applicationContext.xml文件和幾千個bean/bean工廠。如何找出Spring自動裝配的具體內容?

大部分這些XML配置都會提示類似於default-autowire="byName"的內容,可以有效地啓用自動裝配,但只有一小部分的bean實際上是自動裝配的。大部分的bean屬性都是明確設置的。

(這是歷史的原因,我想這就是你怎麼稱呼它,當你沒有在過去的足夠聰明。)

現在我們想在所有去除自動裝配。我們相信,只有一小部分的bean實際上是自動裝配的 - 但我們不知道,究竟是什麼,確切地說是什麼。我的問題是:

我們怎樣才能知道Spring的自動裝配是什麼?

理想情況下,我們需要獲取一個bean /屬性列表,以便我們可以將這些顯式注入到XML配置中。但在用調試器深入Spring內部之前,我決定詢問SF上的某個人是否已經解決了類似的任務。

ps。我無意討論自動裝配是好還是壞。我們有許多內部技術原因來消除自動裝配,就是這樣。

回答

7

您可以嘗試在Spring中啓用DEBUG日誌記錄。它在初始化階段打印大量信息。我敢打賭,自動佈線信息也被打印出來。您只需要找到該消息,然後在應用程序完全初始化後解析日誌文件。

UPDATE:我相信AbstractAutowireCapableBeanFactory負責自動佈線邏輯。你可以檢查autowireByName方法。它會生成以下日誌消息,您可以在日誌文件中搜索:

logger.debug("Added autowiring by name from bean name '" + beanName + 
    "' via property '" + propertyName + "' to bean named '" + propertyName + "'"); 
+1

謝謝,我也發現了這個日誌語句。我現在刪除了約。在我們的豆20自動線。 – lexicore

1

我的猜測是在特定文件中啓用該包(自動裝配的包)的記錄器(log4j)。

這將輸出所有bean的名稱。