Spring IoC/ DI 컨테이너

Minkyeong Kim·2021년 11월 15일
0

[boostcourse] Web-Backend

목록 보기
22/55

컨테이너(Container)

  • 컨테이너는 인스턴스의 생명주기를 관리

  • 생성된 인스턴스에게 추가적인 기능 제공

  • ex) Servlet을 실행해주는 WAS는 Servlet 컨테이너를 가지고 있음

    • WAS는 웹 브라우저로부터 서블릿 URL에 해당하는 요청을 받으면, 서블릿을 메모리에 올린 후 실행
    • 개발자가 서블릿 클래스를 작성했지만, WAS가 가지고 있는 Servlet 컨테이너가 실제 메모리에 올리고 실행하는 것
    • Servlet컨테이너는 동일한 서블릿에 해당하는 요청을 받으면, 또 메모리에 올리지 않고 기존에 메모리에 올라간 서블릿을 실행하여 그 결과를 웹 브라우저에게 전달

IoC란?

  • Inversion of Control의 약자

  • 컨테이너가 코드 대신 오브젝트의 제어권을 갖고 있어 IoC(제어의 역전)이라 함

  • ex) 서블릿 클래스는 개발자가 만들지만, 그 서블릿의 메소드를 알맞게 호출하는 것은 WAS, 이렇게 개발자가 만든 어떤 클래스나 메소드를 다른 프로그램이 대신 실행해주는 것을 제어의 역전이라고 함

DI

  • Dependency Injection의 약자, 의존성 주입이란 뜻

  • 클래스 사이의 의존 관계를 빈(Bean) 설정 정보를 바탕으로 컨테이너가 자동으로 연결해주는 것

  • 팩토리에서 만들어진 인스턴스를 가져올 수 있는 방법 중 하나

  • DI가 적용되지 않으면 개발자가 직접 인스턴스를 생성해야 한다.

  • new를 사용하여 직접 인스턴스를 생성하는 것이 아니라 컨테이너가 알아서 인스턴스를 생성해 변수에 할당해줌

  • 기존 할당 방식

class 엔진 {

}

class 자동차 {
     엔진 v5 = new 엔진();
}
  • DI가 적용되어 컨테이너가 할당해주는 방식
@Component
class 엔진 {

}

@Component
class 자동차 {
     @Autowired
     엔진 v5;
}

Spring에서 제공하는 IoC/DI 컨테이너

  • BeanFactory
    • IoC/DI에 대한 기본 기능을 가지고 있다
  • ApplicationContext
    • BeanFactory의 모든 기능을 포함하며, 일반적으로 BeanFactory보다 추천됨, 트랜잭션처리, AOP등에 대한 처리 가능
    • BeanPostProcessor, BeanFactoryPostProcessor 등의 자동 등록, 국제화 처리, 어플리케이션 이벤트 등을 처리 가능
      • BeanPostProcessor : 컨테이너의 기본로직을 오버라이딩하여 인스턴스화와 의존성 처리 로직 등을 개발자가 원하는 대로 구현 가능
      • BeanFactoryPostProcessor : 설정된 메타 데이터를 커스터마이징 가능

0개의 댓글