2011-07-11 35 views
3

我有一個服務bean(用@Service註釋),它實現了用於擴展ApplicationEvent抽象類的T類型事件對象的ApplicationListener接口。還有就是這個在Spring文檔here使用實現ApplicationListener的@Autowired注入bean不起作用?

但是當我嘗試這個bean注入到使用@Autowired其他的我得到一個非常簡單和明顯的例子是:

org.springframework.beans.factory .NoSuchBeanDefinitionException:否 匹配依賴類型爲[...]的Bean:預期至少有1個 bean,該bean有資格作爲此依賴關係的自動連線候選。 相關注釋 如果我嘗試使用類似@Resource然後我得到一類轉換異常(試圖注入{@ org.springframework.beans.factory.annotation.Autowired(必需=真)}

一種類型的資源,但獲得一個代理服務器)。

回答

5

,如果我嘗試使用類似@Resource然後我得到的一類投 異常(試圖注入一個類型的資源,但獲得一個 代理)。

這聽起來像是您想要通過類引用它,而它是作爲基於接口的JDK代理進行連接的。

如果你有這個類:

@Service 
public class FooServiceImpl implements FooService{} 

線作爲:

@Autowired 
private FooService fooService; 

不是:

@Autowired 
private FooServiceImpl fooService; 

參考:

+0

是啊,工作(上了春季論壇上相同的答案前一段時間)。我應該打開類代理嗎? – nvrs

+0

@nvrs我覺得最好使用接口(請閱讀Joshua Bloch的Effective Java以解釋原因)。首先,爲單元測試嘲笑服務更容易。 –

+0

這很公平。儘管如此,我仍然可以看到在此特定場合編程接口的唯一原因(當然還有JDK代理的東西),這個服務首先是一個實現。 – nvrs