본문 바로가기
IT/Java

Spring DL 이란?(Dependency Lookup)

by 성준하이 2023. 7. 30.
반응형

이전 포스팅에서 스프링의 특징들에 대해 다룬적이 있다.

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

 

Spring 에서 IOC, AOP, DI 에 대하여

이번 포스팅에서는 SPRING의 핵심요소인 IOC, AOP, DI에 대해서 다뤄볼 것이다. 다른 특징들도 많지만 이 세가지는 스프링의 장점으로 많이 알려져있다. 하나씩 다뤄보도록 해보자. IOC(Inversion of Contro

thenicesj.tistory.com

https://thenicesj.tistory.com/640

 

Spring 에서 Singleton

singleton 패턴에 대해서는 아래 참고 포스팅을 참고 바란다. spring 에서의 기능중 하나는 의존성 주입인 DI 가 있다. 자세한 내용은 아래 참고 포스팅 참고바란다. 스프링에서는 컨테이너 위에 Bean

thenicesj.tistory.com

https://thenicesj.tistory.com/641

 

Spring prototype BeanScope

Java Spring을 사용할 경우 Bean 을 Spring 위에 Singleton 으로 올리는것에 대해서는 이전 포스팅에서 다룬적이 있다. Singleton 에 대해서는 아래 참고 포스팅을 참고 바란다. 이번 포스팅에서 다룰 내용인

thenicesj.tistory.com

 

반응형

'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

댓글