IoC 컨테이너와 DI

타미·2020년 10월 26일
0

Spring 뽀개기 👊

목록 보기
1/2

Spring에서는 오브젝트 생성, 관계설정 등을 독립적인 컨테이너가 담당한다. -> IoC 컨테이너

  • BeanFactory는 Bean을 생성하고 라이프 사이클을 관리하는 게 주 업무이다.
  • Application Context는 Bean Factory를 상속하며 추가로 Application 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC 엔진이라는 의미가 좀 더 부각된다고 보면 된다.

POJO와 메타정보로 IoC 컨테이너에 Bean을 등록한다.

POJO

그냥 쌩 Java Object

❓왜 자꾸 Spring의 이점과 관련해서 POJO가 나올까!
(요약)기존 EJB를 쓸 때는 Bean에 EJB 관련 클래스를 상속했다.

  • 매우 번거롭고 불편하다.
  • 특정 기술에 종속된다.
  • 객체지향 설계를 방해한다. (객체지향-상속)

이를 개선한 것이 Spring이다.

  1. 객체지향을 만족해야 POJO라고 할 수 있다.
  2. Annotaion을 사용했더라도 환경에 종속되지 않는다면 POJO이다.

    Spring이 POJO인 이유! Annotaion을 사용하지만 SpringFramework에 종속되지 않기 때문에 Spring 의존성 없이 테스트할 수 있었던 것이다.

설정 정보

  • 설정 정보 != xml
    • xml 파일에서 설정 정보를 읽어올 수 있다. (O)
    • 프로퍼티 파일에서도 설정 정보를 읽을 수 있다.


요런 것들이 Bean Difinition(순수한 추상정보, 메타정보)이다.


Bean Definition과 POJO를 결합하여 Bean을 생성한다.

등록 방법


디폴트 메타정보를 사용할 수 있다.


직접 Bean Definition을 설정할 수도 있다.

Application Context의 종류

  • StaticApplicationContext
    • 주로 Bean 등록 테스트할 때 사용한다.
  • GenericApplicationContext
    • Reader와 결합하여 사용 (ex. XmlBeanDefinitionReader)
  • GenericXmlApplicaionContext
    • Xml Reader 내장
  • WebApplicationContext
    • 웹 환경에서 사용할 때 필요한 기능 추가

Application Context 구조

하나 이상의 IoC 컨테이너가 필요할 때는 Application Context 계층 구조를 사용한다.

  • 자식 -> 직계 부모순으로 bean 탐색
  • 발견하면 멈춘다.
  • 부모 -> 자식으로 탐색 (X)
    그래서 이게 왜, 언제 필요하지..?
  1. 2개의 Application Context

    Servlet 레벨에서 1개, WebApplication 레벨에서 1개 (Root, 부모) 만들어준다. 가장 많이 사용!


    Servlet외에 다른 것을 교체하기 위함이라는데 아직은 잘 모르겠다...Servlet Layer, Application Layer라는 게 무슨 의미인지 모르겠다

  2. 	![](https://velog.velcdn.com/images%2Fmoonyoung%2Fpost%2F24269ed0-89f5-4f1b-81fa-c05da63b3ca7%2Fimage.png)

    ApplicationContext 등록

  • Root Application Context
    • Listener로 등록한다.
      • 애플리케이션 시작: 컨텍스트 초기화, 애플리케이션 종료: 컨텍스트 종료
  • Servlet Context
    • DispatcherServlet을 등록하면 ServletContext가 등록된다.
profile
IT's 호기심 천국

0개의 댓글