Search
Duplicate

[스프링 핵심원리 기본] 빈 스코프 - 프로토타입 스코프와 싱글톤 빈 함께 사용시 Provider로 해결

상태
스프링 핵심원리 기본
담당자
속성 1
Spring
JAVA
속성
17

ObjectFactory, ObjectProvider

의존관계를 외부에서 주입(DI) 받는 게 아니라 이렇게 직접 필요한 의존관계를 찾는 것을 Dependency Lookup (DL) 의존관계 조회(탐색) 이라 한다.
지정한 빈을 컨테이너에서 대신 찾아주는 DL 서비스를 제공하는 것이 바로 ObjectProvider이다. 참고로 과거에는 ObjectFactory가 있었는데, 여기에 편의 기능을 추가해서 ObjectProivder가 만들어졌다.
Code
실행해보면 prototypeBeanProvider.getObject()을 통해서 항상 새로운 프로토타입 빈이 생성되는 것을 확인할 수 있다.
ObjectProvider의 getObject()를 호출하면 내부에서는 스프링 컨테이너를 통해 해당 빈을 찾아서 반환한다. (DL)
스프링이 제공하는 기능을 사용하지만, 기능이 단순하므로 단위 테스트를 만들거나 mock 코드를 만들기는 훨씬 쉬워진다.
ObjectProvider는 지금 딱 필요한 DL 정도의 기능만 제공한다.
특징 ObjectFactory: 기능이 단순, 별도의 라이브러리 필요 없음, 스프링에 의존
ObjectProvider: ObjectFactory 상속, 옵션, 스트림 처리 등 편의 기능이 많고, 별도의 라이브러리 필요 없음, 스프링에 의존
결론
싱글톤 빈과 함께 사용할 때는 ObjectProvider 를사용하는 것을 권장하지만, Spring이 아닌 자바에서 사용하게 된다면 javax.inject.Provider를 사용해야 되지만, 거의 사용할 일이 없을 것 같으므로 인지만 하고 넘어갔다.  그리고 무엇보다도 싱글톤과 함께 사용되는 프로토타입 빈이라면 ObjectProivder.getBean을 통해서 가져와야 된다는 것을 인지하고 있자.
이 글은 인프런의
제목 : 스프링 핵심 원리 - 기본편
강사 : 김영한 님의 동영상을 참조해 만들었습니다.