개발일지/SPRING

[Spring] Dependency Injection(DI) 개념

양쏘쏘 2021. 6. 5. 12:00
728x90
반응형

DepenDency Injection(DI)

: 의존 관계 주입을 통해 오브젝트 간 의존관계를 만들어줌

  스프링은 런타임 시 객체 간 의존관계를 부여(컨테이너를 통해)

  객체 간의 결합도를 낮춰줌(인터페이스를 사용) -> 객체 간 영향력이 줄어들어 변경용이성, 확장성 증가

 

IoC(Inversion of Control)

: 인스턴스를 제어하는 주도권이 역전됨

   DI 컨테이너가 인스턴스의 생성과 의존 관계 연결을 해주기 때문

  ( A가 B를 원할 때 B를 생성해서 A에게 넣어줌 )

   

IoC 컨테이너

: 인스턴스의 생명주기 관리 및 의존 관계 주입을 처리함

  스프링 빈(Spring Bean)의 생성, 관계, 조립, 생명주기를 관리함

- BeanFactory

  경량 컨테이너로 작업할 때 활용하고 DI의 기본 기능을 제공함

  빈을 가져오고 의존관계를 만들어줌

- ApplicationContext

   BeanFactory 인터페이스를 상속받은 하위 인터페이스로 확장된 기능이 제공되고 

   일반적인 스프링 컨테이너를 의미함

//Spring xml 설정 파일
ApplictionContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

//오브젝트(빈) 정의
MyBean bean = (MyBean) context.getBean("myBean");

- WebApplicationContext

   웹 애플리케이션을 위한 applicationContext로 xml파일로 설정정보 정의

   1) ContextLoaderListener

       Persistence(DAO), Service 관련 스프링 빈을 등록

       root-context.xml

    2) DispatcherServlet

        컨트롤러, 서블릿 관련 빈 등록

        servlet-context.xml

 

[전체 흐름]

톰캣이 ContextLoaderLsitener를 로드 시키면서 root-context.xml 파일에 있는 스프링 빈 정보와

의존관계를 읽어 해당되는 빈을 생성하고 등록함

사용자의 request를 받으면 DispatcherServlet에 던져주고 servlet-context.xml에서 해당되는 스프링 빈과

관계를 파악해서 의존관계를 다시 만들어줌

 

Web.xml에 ContextLoaderListener,DispatcherServlet을 사용해서 ApplicationContext를 생성

 

 

 

728x90