我正在使用Spring 3.1.3作爲webapp,使用XML配置和組件掃描。爲什麼Spring忽略我的@DependsOn註解?
我意識到其中一個掃描的組件必須在其他幾個之前初始化。在需要構造後初始化的所有類上,我在方法上有一個@PostConstruct註釋。
要設置依賴性順序,我將類中的'@Component'更改爲'@Component(「configData」)',該類需要在其他類之前進行後構造。然後,我在每個需要在「configData」bean之後構造的類定義之前添加了@DependsOn(「configData」)。
從我讀過的,這是我需要執行的依賴順序。
然後我建立了一切,設置我的斷點,並啓動了應用程序。我期望在任何依賴bean之前在「configData」bean中達到斷點。這不是發生了什麼事。第一個斷點位於其中一個依賴bean的「init」方法中。
然後,我更改了我的「log4j.xml」,將「debug」設置爲「org.springframework」的日誌記錄級別,並重新測試。斷點行爲是相同的,我的日誌記錄沒有顯示任何有關Spring初始化的調試信息(我已經調試過log4j初始化本身,所以我確認我已經爲「org.springframework」設置了DEBUG)。
我可能會丟失什麼?
更新:
如果它的事項,在這裏有一對夫婦的我在這裏做什麼骨架的例子。
@Component("configData")
public class ConfigData {
....
@PostConstruct
public void init() {
....
}
}
@Component
@DependsOn("configData")
public class ClassDependentOnConfigData extends BaseClass {
....
@Override
@PostConstruct
public void init() {
super.init();
....
}
}
要重申,有什麼我發現在運行時的「的init()」中的「ClassDependentOnConfigData」方法被調用由春「的init()」方法之前在「ConfigData」。
還要注意「BaseClass」對於「ConfigData」有一個「@Autowired」。
你可以張貼bean定義的configData豆(Java和/或XML),以及後應初始化一個bean它作爲一個例子嗎? –
好吧,但這些只會是骨架,你會看到我的描述中顯而易見的。 –
至於沒有看到Spring調試消息。你有沒有檢查你沒有全局THRESHOLD集或換句話說 - 你看到其他的DEBUG消息嗎? –