반응형
이전 포스팅에서 스프링의 특징들에 대해 다룬적이 있다.
AOP, DI 등 내용이었고 자세한 것은 아래 참고 포스팅 참고 바란다.
이번 포스팅에서는 비슷하지만 좀 다른 DL(Dependency Lookup) 에 대해서 다뤄보려고 한다.
약자만 봐도 대충 이해는 되겠지만 의미는 다음과 같다.
의존관계가 있는 객체를 외부에서 주입 받는 것이 아닌, 의존관계가 필요한 객체에서 직접 검색하는 방식
헷갈릴 수 있는 부분이 클라이언트 객체(의존관계가 필요한 객체)에서는 의존하고자 하는 인터페이스 타입만 지정해서 검색할 뿐 해당 인터페이스를 구현한 구체적인 클래스 객체에 대한 결정과 해당 객체에 대한 생명 주기는 IoC 컨테이너에서 책임진다.
결국 의존관계를 외부에서 주입이 아니라 직접 의존관계를 찾는것으로 DI 랑 반대되는 개념과 비슷하다.
가장 많이 쓰이는 경우는 프로토 타입의 빈을 싱글톤 빈과 같이 사용시 생기는 문제를 해결하기 위해서 사용을 한다.
프로토 타입 빈과 싱글톤 빈의 차이는 아래 참고 포스팅 참고 바란다.
그래서 결국 DL은 prototype을 사용시에 많이 사용하게 된다.
다시 말하지만, 이유는 bean 주입을 하기 위함이고 주입할 대상을 찾아야 하기에 DL이 사용된다.
대표적으로는 ApplicationContext 사용, ObjectProvider/ObjectFactory 사용, JSR-330 Provider 사용 정도가 있다.
ApplicationContext
@Service @RequiredArgsConstructor public class TestService { private final ApplicationContext context; public Member dependencyLookUp() { final Testss t = context.getBean(Testss.class); ...이하 생략 |
ObjectFactory, ObjectProvider
- ObjectProvider: 지정한 빈을 컨테이너에서 대신 찾아주는 DL 서비스를 제공
- ObjectFactory: ObjectProvider의 구 버전 클래스(현재는 잘 사용안함)
- 스프링 컨테이너에서만 사용 가능하다
@Autowired private ObjectProvider<PrototypeBean> prototypeBeanProvider; public int logic() { PrototypeBean prototypeBean = prototypeBeanProvider.getObject(); prototypeBean.addCount(); int count = prototypeBean.getCount(); return count; } |
JSR-330 Provider
- 스프링이 아닌 자바 표준이라서 어디서든 사용가능하고 라이브러리만 잘 추가 하면 된다.('javax.inject:javax.inject:1')
@Autowired private Provider<PrototypeBean> provider; public int logic() { PrototypeBean prototypeBean = provider.get(); prototypeBean.addCount(); int count = prototypeBean.getCount(); return count; } |
참고 포스팅
https://thenicesj.tistory.com/144
https://thenicesj.tistory.com/640
https://thenicesj.tistory.com/641
반응형
'IT > Java' 카테고리의 다른 글
Arrays 클래스 (81) | 2023.08.02 |
---|---|
배열의 부분복사(arraycopy, copyOfRange) (23.07.31) (10) | 2023.08.01 |
Spring prototype Bean (53) | 2023.07.29 |
Spring 에서 Singleton (51) | 2023.07.28 |
Queue (LinkedList) 사용법 (63) | 2023.07.26 |
댓글