究竟是什么导致这种情况?
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左右。
答案 0 :(得分:3)
修复可能是这样的:
public Controller(
@Qualifier("beanQualifier") KeyCardManager database,
LdapPersonDao personManager,
GiveFormValidator validator
)
由于在您的应用程序上下文中显然有两个类型为KeyCardManager
的bean,您需要告诉上下文哪一个要连接。
不幸的是,@Qualifier
机制不适用于bean名称,您必须使用相应的@Qualifier
注释实际的bean,或者在XML bean定义中添加<qualifier>
元素。 / p>
@Resource
注释适用于bean名称,但它不支持构造函数参数(这不是Spring的错误,它是JSR-250标准注释@Target({TYPE, FIELD, METHOD})
)
<强>参考:强>
如果您不知道为什么在上下文中有两个相同类型的bean,首先导航到bean接口(我假设KeyCardManager
是一个接口,如果没有,请执行相同的操作无论如何,如果你使用Eclipse,请选择Navigate > Open Type Hierarchy
。如果您发现多个具体类继承自KeyCardManager
(包括KeyCardManager
本身),那么可能就是您的问题。
如果不是这种情况,您可能在应用程序上下文中有两个相同类型的bean。可能发生的一种方法是通过XML和classpath scanning定义bean。即如果你的XML中有这一行:
<context:component-scan base-package="org.example"/>
确保不要手动连接org.example
包中的任何bean(或者你会有双豆,这会导致你遇到的问题)。
答案 1 :(得分:1)
org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义[fi.utu.keycard.business.KeyCardManager]类型的唯一bean:期望的单个匹配bean但找到2:[dataBaseTarget,database]
您似乎按班级类型进行自动装配。但是在同一个类的上下文中有多个bean可用。这是dataBase
&amp; dataBaseTarget
byType
如果允许属性自动装配 只有一个豆子 容器中的属性类型。如果 有一个以上,一个致命的 抛出异常,这个 表示您不能使用byType 自动装配该bean。如果有 没有匹配的豆,没有任何反应; 该物业未设定。如果是这样的话 不可取的,设置 dependency-check =“objects”属性 value指定错误 在这种情况下被抛出。