나는 공장 콩의 문제가 표시되지 않습니다 그리고 난과 같이 그것을 할 것 :
import org.springframework.beans.factory.FactoryBean;
import org.springframework.stereotype.Component;
@Component
public class X {
public static class XFactory implements FactoryBean<X> {
@Override
public X getObject() throws Exception {
return new X();
}
@Override
public Class<?> getObjectType() {
return X.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
}
을이 공장 빈을 주입. 그 봄이 항상 싱글에 새로운 인스턴스를 반환하는 프록시를 생성하므로
그렇지 않으면 당신은 범위
@Scope(proxyMode=ScopedProxyMode.TARGET_CLASS, value=ConfigurableBeanFactory.SCOPE_PROTOTYPE)
와 X 콩 당신이 아닌 기본 프록시 모드를 사용해야 할 수 있습니다.
그렇게처럼보다 XML의 설정에 경우 :
<bean id="x" class="X" scope="prototype">
<aop:scoped-proxy>
</bean>
재밌게.
편집 :
당신이 @Component를 통해 공장에 주석을
이 (내가 위를 추가 한), #isSingleton에서 false를 반환하고 두 번 당신과 함께 공장 빈을 주입 할 수있는 X를 반환하지 않는 확인 @ 당신의 싱글 톤에 호소했습니다.
그렇지 않으면 난 그냥
예상대로 작동
import org.springframework.context.annotation.Scope;
import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.stereotype.Component;
@Component
@Scope(value="prototype", proxyMode=ScopedProxyMode.TARGET_CLASS)
public class X {
}
을 확인했습니다.
편집 2 :
당신이 공장 빈을 주입하고 싶지만 당신이 범위 귀하의 공장을 프로토 타이핑 할 수있는 의존성을 주입하지 않으려면 (@Scope (프록시 모드 = ScopedProxyMode.TARGET_CLASS, 값 = "프로토 타입"))하지만 새로운 팩토리가 X가 관련 될 때마다 만들어지기 때문에 아마도 당신이 원하는 것이 아닐 것입니다.
공장 자체에 주사를 넣지 않으려면 Olivers 조회 방법을 사용하십시오.
나는이 기술을 내 코드에서 사용한다. 그것은 꽤 잘 작동합니다. 유일한 단점은 추상 클래스를 포함하는 클래스가 추상 클래스이므로 다른 인터페이스에서 선언 된 메소드를 작성하기 위해 IDE에서 제공 할 수있는 지원 량이 줄어 듭니다. –