문제

@autowired를 사용하여 @Component로 구성된 비 관리 Bean을 관리되는 Bean에 주입하고 싶습니다. 나는 구성이 올바르게 있다고 확신하지만 어떤 이유로 든 예외를 계속 얻습니다.

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

오류를 바탕으로 BAZ 클래스를 찾을 수 없다고 생각하지만 그 이유는 확실하지 않습니다. XML 구성의 컨텍스트 : 스프링 구성 요소 가이 작업을 수행 할 수있게되었음을 이해합니다. 또한 적절한 JAR 파일 (spring-weaving.jar 및 sagneweaver.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는 그 중 하나가 아닙니다. 왜 @Component 주석에 주석이없는 클래스를 집어 들지 않는지 모르겠습니다.

도움이 되었습니까?

해결책

Bar는 XML로 구성되므로 XML로만 구성 할 수 있습니다. 즉, 당신은 그들을 혼합 할 수 없습니다. BAZ에 대한 "@autowired"주석이 픽업되지 않도록합니다 (주석 중 어느 것도 없음). 스프링이 다른 주석을들을 수있는 클래스 레벨에서 스프링 주석을 추가 할 때만 가능합니다.

당신이해야 할 일은 XML에서 콩을 유형별로 자동화하도록 구성하고 해당 유형의 세터를 추가하면 원하는 동작을 달성하는 것입니다.

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

한 가지 더, @component와 콩에 주석을 달 때 ~이다 봄 관리 콩. XML로 생성되지 않았다고해서 관리되지 않는다는 의미는 아닙니다. 관리되지 않는 콩은 봄부터 얻지 못하는 콩입니다.

Bar와 Baz는 모두 봄 관리됩니다. 다른 것을 정의하기 위해 선택한 메커니즘입니다.

다른 팁

한 측면에서 이전 응답은 정확하지 않습니다. XML로 구성된 Autowire Bean을 사용할 수 있습니다.

섹션 3.4.5에서 http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html:

XML 기반 구성 메타 데이터 [2]를 사용하는 경우 요소의 Autowire 속성으로 Bean 정의에 대한 Autowire 모드를 지정합니다. Autowiring 기능에는 5 가지 모드가 있습니다. 콩 당 자동화를 지정하므로 Autowire에 어떤 것을 선택할 수 있습니다.

이름, 유형 및 생성자로 자동 로이어를 사용할 수 있습니다. 여기에는 조잡한 예가 있습니다. http://www.java2s.com/code/java/spring/autowiring.htm

오류는 XML 구성 파일에 정의 된 Bean 시퀀스 때문입니다.

XML 파일에서와 같이 Bean bar 먼저 생성 된 다음 의존 콩으로 인해 @Autowired 찾을 수 없습니다 baz.

먼저 Bean을 선언해야합니다 baz 그리고 와서 bar.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top