복붙노트

[SPRING] 스프링 autowire 및 프로토 타입 범위

SPRING

스프링 autowire 및 프로토 타입 범위

다음과 같은 주석을 가진 Bar라는 클래스가 있습니다. @Configurable (autowire = Autowire.BY_TYPE)

개인 회원에는 다음과 같은 주석이 있습니다.

@Autowired(required = true)
private Foo foo;

스프링 환경에서 나는 Foo 클래스의 bean을 가지고있다. bean이 scope = "prototype"으로 정의 된 경우 작동하지 않으며 다음과 같은 예외가 발생합니다.

일단 내가 주입 된 빈 범위를 "싱글 톤"으로 변경하면 잘 동작한다.

프로토 타입 범위 bean의 자동 배선이 허용되지 않습니까?

수동으로 빈을 가져 오는 것 외에 다른 해결 방법이 있습니까?

미리 감사드립니다. Avner

해결법

  1. ==============================

    1.다음 링크는 이러한 시나리오에 대한 대체 솔루션을 제공합니다.

    다음 링크는 이러한 시나리오에 대한 대체 솔루션을 제공합니다.

    첫 번째 링크에서는 Food에 추가하는 방법에 대해 설명합니다.

    @Component
    @Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "prototype")
    class Foo
    

    매번 새로운 인스턴스가 생성됩니다.

  2. ==============================

    2.그 콩에 대한 XML에서 선언 된 프로토 타입 / 싱글 톤 것은 문제라고 생각합니다.

    그 콩에 대한 XML에서 선언 된 프로토 타입 / 싱글 톤 것은 문제라고 생각합니다.

    나는 그것이 허용되지 않는다고 생각한다. 논리는 허용되는 경우 해당 클래스를 사용할 때마다 항상 해당 빈을 해당 필드로 다시 인스턴스화해야합니다. 특히이 bean이 필드로 autowired되는 클래스가 싱글 톤 그 자체 인 경우 특히 이상합니다.

    범위 속성을 제거하려고하면 프로토 타입 속성 일 경우 검색되지 않습니다. 만약 당신이 applicationContext에서 bean (서비스와 DAO)을 선언했다면, 기본 bean은 singleton이기 때문에 autowire annotation을 singleton으로 지정하십시오.

  3. ==============================

    3.삽입 된 bean 스코프가 'Singleton'이면, bean의 동일한 인스턴스가 자동으로 연결됩니다. 삽입 된 bean 범위가 'prototype'이면 자동 인스턴스 작성 프로세스의 일부로 새 인스턴스가 작성됩니다.

    삽입 된 bean 스코프가 'Singleton'이면, bean의 동일한 인스턴스가 자동으로 연결됩니다. 삽입 된 bean 범위가 'prototype'이면 자동 인스턴스 작성 프로세스의 일부로 새 인스턴스가 작성됩니다.

    어떤 버전의 스프링을 사용하고 있으며 자세한 내용은 spring-context.xml을 첨부하십시오.

  4. from https://stackoverflow.com/questions/9819994/spring-autowire-and-prototype-scope by cc-by-sa and MIT license