본문 바로가기

강의 내용 정리/스프링 핵심 원리 기본

9-3. 프로토타입 스코프 - 싱글톤 빈과 함께 사용시 문제점 ~

이걸 왜 하나 싶지만 뒤에 나온다.

이 코드는 지금까지 배운 것들 : 함 읽어봐라.

 

 

 

 

 

 

 

이런 경우

상황설명 : 위 코드처럼 clientBean이 prototypeBean을 원해서 ( 빈 이름은 클래스이름에서 첫글자 소문자 )

요청. 그 때 만들어서 반환. 이제 스프링컨테이너는 상관X 오직 clientBean에서만 prototypeBean을 관리한다.

 

 

문제점 : 싱글톤 Bean인 clientBean은 다른 값이 담긴 빈을 반환한다.

 

SingletonWithPrototypeTest1

위 그림처럼 싱글톤 빈인 clientBean 에 프로토타입 빈인 prototypeBean 을 주입한다. Test를 위해 static class 만들어주고. 

생성자 주입을 받는다. ( 이 때 @Autowired 를 보고  스프링 컨테이너의 내부에 해당 타입의 빈을 내놓으라고 말함)

ApplicationContext, 즉 스프링컨테이너에 빈 요청을 하고 prototypeBean을 주입받는다. ( 이 때 1. 빈 생성, 2. 의존관계 주입, 3. 초기화 가 일어남. 그리고 DI컨테이너에서는 알바가아님. )

 

 

@Test를 보자. 스프링컨테이너를 생성할 때 ClientBean.class , PrototypeBean.class 를 둘 다 빈으로 등록한다. ( 파라미터에 쓰면 @Component 안 붙여도 컴포넌트스캔방식으로 알아서 올라감. ) 

 

해결법 1. 무식한 방법

logic() 쓸 때마다 직접 빈 요청해서 쓰는 것.

ApplicationContext에서 직접 꺼내오는것 : 너무 지저분

 

 

코드에서 의도하는것 : 우리가 원하는 것 : clientBean 에 들어가 있고 관리 되는 prototypeBean을 쓰고 싶지 않고 prototypeBean을 사용할 떄마다 항상 새로 생성되기를 원함. 

 

Recent Posts
Popular Posts
Recent Comments