[英]Constructor arguments in autowiring sources
究竟是什么原因造成的?
org.springframework.beans.factory.NoSuchBeanDefinitionException: \
No unique bean of type [fi.utu.keycard.business.KeyCardManager] \
is defined: expected single matching bean but found 2: \
[dataBaseTarget, database]
// etc. (rest of Stack Trace is irrelevant)
我需要的是自動裝配3件東西:驗證器,ldap連接和數據庫連接。
我稱之為:
@Controller
Controller(KeyCardManager database,
LdapPersonDao personManager,
GiveFormValidator validator)
如果我更改這些參數的順序,該錯誤似乎是由另一個bean引起的。 我沒有登錄,所以沒有UserDetails左右。
解決方法可能是這樣的:
public Controller(
@Qualifier("beanQualifier") KeyCardManager database,
LdapPersonDao personManager,
GiveFormValidator validator
)
由於在您的應用程序上下文中顯然有兩個KeyCardManager
類型的bean,因此您需要告訴上下文連接哪個。
不幸的是,@ @Qualifier
機制不適用於bean名稱,您必須使用相應的@Qualifier
注釋實際的bean或在XML bean定義中添加<qualifier>
元素。
@Resource
批注可與bean名稱一起使用,但不支持構造函數參數(這不是Spring的錯,它是帶有@Target({TYPE, FIELD, METHOD})
的JSR-250標准批注)
參考:
如果您不知道為什么在上下文中有兩個相同類型的bean,首先導航到bean接口(我假設KeyCardManager
是一個接口,如果不是,則仍然對該類執行相同的操作),如果您使用Eclipse選擇Navigate > Open Type Hierarchy
。 如果您發現多個繼承自KeyCardManager
具體類(包括KeyCardManager
本身),則可能是您的問題。
如果不是這種情況,則您的應用程序上下文中可能有兩個相同類型的bean。 一種可能發生的方式是通過XML和類路徑掃描同時定義bean。 也就是說,如果您的XML中包含以下行:
<context:component-scan base-package="org.example"/>
確保您沒有手動連接org.example
軟件包中的任何bean(否則您將有雙bean,這可能會導致問題)。
org.springframework.beans.factory.NoSuchBeanDefinitionException:沒有定義類型為[fi.utu.keycard.business.KeyCardManager]的唯一bean:期望的單個匹配bean,但找到2:[dataBaseTarget,數據庫]
看來您正在按類類型進行自動裝配。 但是在同一個類的上下文中有多個bean。 分別是dataBase
和dataBaseTarget
byType的
如果容器中恰好有一個屬性類型的bean,則允許自動裝配屬性。 如果存在多個錯誤,則將引發致命異常,這表明您不能對該bean使用byType自動裝配。 如果沒有匹配的bean,則什么也不會發生。 該屬性未設置。 如果不希望這樣做,則設置dependency-check =“ objects”屬性值將指定在這種情況下應引發錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.