gpt4 book ai didi

java - Autowiring 源中的构造函数参数

转载 作者:行者123 更新时间:2023-11-30 07:34:54 26 4
gpt4 key购买 nike

究竟是什么原因造成的?

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)

我需要 Autowiring 3 个东西: validator 、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或添加 <qualifier> XML bean 定义的元素。

@Resource注释与 bean 名称一起使用,但它不支持构造函数参数(这不是 Spring 的错,它是 JSR-250 带有 @Target({TYPE, FIELD, METHOD}) 的标准注释)

引用:


疑难解答

如果你不知道为什么上下文中有两个相同类型的bean,首先导航到bean接口(interface)(我假设KeyCardManager是一个接口(interface),如果不是,对类做同样的事情无论如何),如果您使用 Eclipse,请选择 Navigate > Open Type Hierarchy .如果您发现多个继承自 KeyCardManager 的具体类(包括 KeyCardManager 本身),则可能是您的问题。

如果不是这种情况,您的应用程序上下文中可能有两个相同类型的 beans。一种可能发生的方式是当您通过 XML 和 classpath scanning 定义一个 bean 时。 . IE。如果您的 XML 中有这一行:

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

确保您没有手动连接 org.example 中的任何 bean包(否则你会有双 bean ,这可能会导致你遇到的问题)。

关于java - Autowiring 源中的构造函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4897637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com