2011-07-19 101 views
0

彈簧2.5,自動裝配Autowired問題與豆

我有一個類StockDwr

StockDwr這是一個bean名稱股票誰在這個類中有一個原型範圍

,我有一個屬性ModRepository與@Autowired註解

ModRepository在這個類由該類

只有usedd我只有說(因爲我試圖找到問題)

public void read(String fileName) { 
    System.out.println(fileName); 
} 

,當我去誰使用股票JSP我得到

錯誤創建名爲「股票」豆:領域的自動裝配失敗;嵌套異常是org.springframework.beans.factory.BeanCreationException:無法自動裝入字段:private com.domain.ModRepository com.web.StockDwr.modRepository;嵌套異常是org.springframework.beans.factory.NoSuchBeanDefinitionException:沒有定義[com.domain.ModRepository]類型的唯一bean:[com.domain.ModRepository]類型的不滿足依賴性:預計至少有1個匹配的bean

我沒有在XML文件中定義ModRepository,我試圖做到這一點,但它得到同樣的問題

任何想法?

+0

你是如何嘗試完全定義ModRepository的? – abalogh

+1

redfox26

回答

2

很可能您在xml文件中爲ModRepository創建了不正確的bean定義。 spring無法找到bean com.domain.ModRepository

自動裝配發生在類型。你的ModRepository實現了一些接口嗎?在這種情況下,如果有很多實現,spring將無法唯一地識別一個bean。

爲了避免使用@Qualifier註解。限定符確保自動裝配按名稱發生。

另外,您可以與註釋嘗試,把一個@Component上ModRepository 類的頂部,並確保你在你的applicationContext.xml這兩行

<context:annotation-config /> 
    <context:component-scan base-package="com.domain" /> 
+0

與@Component工作,但我不明白爲什麼我需要把這個annonation。我試圖添加其他bean(誰沒有@Component)和那工作...所以現在不真的與ModRepository – redfox26

+0

的問題可能是您需要@ qualifier註釋使自動裝配byName而不是byType – kalyan

+0

我試試有和沒有接口的ModRepository,同樣的事情...我試圖在我的StockDwr的ModRepository屬性的Qualifier註釋,但我得到同樣的錯誤,如果我不把組件註釋... – redfox26

2

你會得到這個錯誤,因爲spring不知道你的ModRepository對象。爲了自動裝配東西,春天必須知道什麼是東西。你說你試圖在你的應用上下文xml中定義ModRepository,但是仍然得到相同的錯誤。在這種情況下,您必須對其進行不正確的定義,因爲這正是您必須要做的。

+0

習慣性如果你把Autowired,你不需要在xml文件中定義它。我在xml文件中添加了: redfox26

+1

「習慣性,如果你把Autowired,你不需要在xml文件中定義它」 - 這不是完全正確。您總是必須定義ModRepository bean本身,或者像您指出的那樣使用XML,或者使用(at)Service,(at)Component或類似的方式註釋您的ModRepository實現。 – pap

1

我假設你配置

<context:component-scan base-package="..."/>. 

沒有@Component註解,Spring沒有辦法知道哪個類是它應該跟蹤的組件。

-1

@Autowired使用註釋

@Repository( 「ExampleDao」)公共類ExampleDaoImpl實現ExampleDao

@Service( 「ServiceExample」)公共類ExampleServiceImpl實現ExampleService

@Controller公共類ExampleController

@Autowired private ExmpleService ServiceExample;