Spring에서는 오브젝트 생성, 관계설정 등을 독립적인 컨테이너가 담당한다. -> IoC 컨테이너
- BeanFactory는 Bean을 생성하고 라이프 사이클을 관리하는 게 주 업무이다.
- Application Context는 Bean Factory를 상속하며 추가로 Application 전반에 걸쳐 모든 구성요소의 제어 작업을 담당하는 IoC 엔진이라는 의미가 좀 더 부각된다고 보면 된다.
POJO와 메타정보로 IoC 컨테이너에 Bean을 등록한다.
POJO
그냥 쌩 Java Object
❓왜 자꾸 Spring의 이점과 관련해서 POJO가 나올까!
(요약)기존 EJB를 쓸 때는 Bean에 EJB 관련 클래스를 상속했다.
- 매우 번거롭고 불편하다.
- 특정 기술에 종속된다.
- 객체지향 설계를 방해한다. (객체지향-상속)
이를 개선한 것이 Spring이다.
- 객체지향을 만족해야 POJO라고 할 수 있다.
- Annotaion을 사용했더라도 환경에 종속되지 않는다면 POJO이다.
Spring이 POJO인 이유! Annotaion을 사용하지만 SpringFramework에 종속되지 않기 때문에 Spring 의존성 없이 테스트할 수 있었던 것이다.
설정 정보
- 설정 정보 != xml
- xml 파일에서 설정 정보를 읽어올 수 있다. (O)
- 프로퍼티 파일에서도 설정 정보를 읽을 수 있다.
요런 것들이 Bean Difinition(순수한 추상정보, 메타정보)이다.
Bean Definition과 POJO를 결합하여 Bean을 생성한다.
등록 방법
디폴트 메타정보를 사용할 수 있다.
직접 Bean Definition을 설정할 수도 있다.
Application Context의 종류
- StaticApplicationContext
- GenericApplicationContext
- Reader와 결합하여 사용 (ex. XmlBeanDefinitionReader)
- GenericXmlApplicaionContext
- WebApplicationContext
Application Context 구조
하나 이상의 IoC 컨테이너가 필요할 때는 Application Context 계층 구조를 사용한다.
- 자식 -> 직계 부모순으로 bean 탐색
- 발견하면 멈춘다.
- 부모 -> 자식으로 탐색 (X)
그래서 이게 왜, 언제 필요하지..?
-
2개의 Application Context
Servlet 레벨에서 1개, WebApplication 레벨에서 1개 (Root, 부모) 만들어준다. 가장 많이 사용!
Servlet외에 다른 것을 교체하기 위함이라는데 아직은 잘 모르겠다...Servlet Layer, Application Layer라는 게 무슨 의미인지 모르겠다
-
-
![](https://velog.velcdn.com/images%2Fmoonyoung%2Fpost%2F24269ed0-89f5-4f1b-81fa-c05da63b3ca7%2Fimage.png)
ApplicationContext 등록
- Root Application Context
- Listener로 등록한다.
- 애플리케이션 시작: 컨텍스트 초기화, 애플리케이션 종료: 컨텍스트 종료
- Servlet Context
- DispatcherServlet을 등록하면 ServletContext가 등록된다.