2010-03-20 42 views
0

我認爲這是一個非常基本的問題,但是在谷歌搜索後我似乎無法找到答案。在注入豆漿期間記錄異常

我需要的是一種在Spring bean構建期間使用log4j記錄一些自定義輸出的方法。我有一個叫做ResponderFactory(在Spring中用作實例工廠)的工廠類,它帶有一個可以拋出兩種不同類型異常的工廠方法。

public CollectorResponder collectorResponder(String inputQueueName) throws ConfigurationException, BrokerConnectionException {} 

現在,通常我可以換一個調用此方法在try-catch塊2個catch子句來處理日誌記錄的情況下爲每個例外。但是,如果我使用Spring將這個由工廠創建的CollectorResponder注入到另一個類中,我不會看到這是如何實現的。

<bean id="responderFactory" class="com.package.ResponderFactory"> 
    <constructor-arg index="0" ref="basicDispatcher" /> 
    <constructor-arg index="1" value="http://localhost:9000" /> 
</bean> 

<bean id="collectorResponder" 
     class="com.package.CollectorResponder" 
     factory-bean="responderFactory" factory-method="collectorResponder"> 
    <constructor-arg value="collector.in" /> 
</bean> 

<bean id="collectorConsumer" class="com.package.CollectorConsumer"> 
    <constructor-arg ref="collectorResponder" /> 
</bean> 

同樣,我想在collectorResponder bean實例化時發現這些異常。現在我正在處理這是CollectorConsumer當我使用new CollectorResponder(...)實例化。

有什麼辦法可以做到這一點?

回答

0

我想你將需要傳遞一個不同的類型給消費者(假設你想在CollectorConsumer的構造函數中記錄錯誤),這是collectorResponder對象實際構造的一個包裝。即包含如

CollectorResponder create() throws whatever 

這是你的消費者構造函數調用。這個包裝器對象與您的工廠代碼非常相似,但不會被Spring理解。否則,這些異常將在您的消費者構造函數代碼運行之前發生,無論如何。 Spring將無法注入異常,並且圍繞一個令人難以置信的懶惰創建對象的proxys不可能在沒有某種方法調用的情況下工作。

我假設你不只是想在responderFactory中記錄異常。

+0

當然,在發佈這個問題之後,我意識到,在工廠本身中記錄異常是愚蠢的,而不是在工廠本身記錄異常,這就是我最終做的。感謝您的迴應! – 2010-03-20 20:02:22