我想用@自动连接注入一种非管理豆配置@组成一个管理豆。我很确定我有配对的,但由于某些原因我不断收到的情况例外:

No unique bean of type [foo.Baz] is defined: Unsatisfied dependency of type [class foo.Baz]: expected at least 1 matching bean

基于该错误,我猜这是不够找到Baz类,但是我不知道为什么。这是我的了解,背景:弹配置元件在XML配置应该让我来做到这一点。我还确信包括适当的罐子文件(spring-weaving.jar 和aspectjweaver.jar).

这里有一个简单的例子,我的设立。

我XML配置:

<beans ...>
    ...

    <context:annotation-config/>
    <context:spring-configured/>
    <context:component-scan base-package="foo"/>

    <bean id="bar" class="foo.Bar"/>
    ...
</beans>

我有一个管理豆:

package foo;

public class Bar {

    @Autowired
    private Baz baz;

    public void setBaz(Baz baz) {
        this.baz = baz;
    }

    ...
}

和一个托管豆:

package foo;

@Component
public class Baz {
    ...
}

有什么东西是我的失踪?

编辑:该记录列出的豆子它的实例,并foo。Baz不是他们中的一个。我不知道为什么它不捡@成分附加说明的类。

有帮助吗?

解决方案

由于Bar配置了xml,因此只能使用xml进行配置。即你不能混合它们。因此,“@ Autowired”关于Baz的注释没有被提取(没有注释)。只有在类级别添加spring注释时,spring才会侦听任何其他注释。

您需要做的是在xml中配置要按类型自动装配的bean,为该类型添加一个setter,您将实现所需的行为。

<bean id="bar" class="foo.Bar" autowire="byType"/>

还有一件事,当您使用@Component注释bean时, 是一个Spring托管bean。仅仅因为它不是用xml创建的,并不意味着它是不受管理的。一个非托管的bean是你从春天得不到的。

Bar和Baz都是春季管理。这是你选择定义不同的机制。

其他提示

上次答复是不正确的,在一个方面。你可以自动装配豆是无配置xml。

从部分3.4.5在 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html:

当使用基于XML结构的元数据的[2],指定自动装配模式,对于bean定义与自动装配属性的要件。自动装配的功能有五种模式。你指定的自动装配每豆和因此可以选择哪些自动装配.

你可以自动装配的名称、类型和构造。有一个粗这样的例子: http://www.java2s.com/Code/Java/Spring/AutoWiring.htm

错误是由XML配置文件中定义的bean序列引起的。

与XML文件一样,首先创建 bar 的bean,然后创建其依赖bean,因为 @Autowired 无法找到 baz

您必须首先为 baz 声明bean,然后为 bar 声明。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top