2017-05-17 3 views
0

는 다음과 같은 클래스를 고려봄은 프로토 타입 빈 confiusion

@Component 
@Scope(scopeName = "prototype", proxyMode = ScopedProxyMode.TARGET_CLASS) 
class PrototypeBean 
{ 
    public void method1() { ... }; 
    public void method2() { ... }; 
} 

@Component 
public class SingletonBean 
{ 
    @Autowired 
    private PrototypeBean prototypeBean; 

    public void SingletonBean doSomething() 
    { 
     prototypeBean.method1(); 
     prototypeBean.method2(); 

    } 
} 

을 지금, 나는 그 때마다 해봐요() 메소드가 호출되는 새로운 PrototypeBean 인스턴스가 생성 SingletonBean에 주입 기대. 그러나 실제로 발생하는 것은 새로운 PrototypeBean 인스턴스가 만들어지고 method1()과 method2()를 호출 할 때 SingletonBean에 삽입됩니다.

나는 왜 이렇게까지 일 했어야했는지는 모르겠다. 걱정된다. 내가 틀렸다면 제발 정정하십시오.

답변

0

예, 예상됩니다!

빈의 범위 속성을 prototype@Scope(scopeName = "prototype")으로 선언했기 때문에 Spring IoC 컨테이너가 해당 빈에 대한 요청이있을 때마다 객체의 새 빈 인스턴스를 강제로 생성한다.

참고 : 원칙적으로 모든 state-full beans에 대한 프로토 타입 범위와 stateless beans에 대한 singleton 범위를 사용하십시오.

+0

오, 확인. doSomething 메서드가 호출 될 때마다 새 인스턴스가 만들어 질 것이라는 확신이 들었습니다. 그럼, 해결 방법을 찾아야 만하는 것 같습니다. – wookie

0

예기치 않은 경우에만 bean을 초기화하므로 예상됩니다. 프로토 타입 범위의 경우 bean은 필요할 때마다 초기화됩니다.