반응형
IoC 컨테이너
컨테이너가 코드 대신 오브젝트에 대한 제어권을 갖고 있다고 해서 IoC라고 부른다.(IoC 컨테이너)
실제로 스프링 컨테이너 또는 IoC컨테이너라고 말하는 것은 바로 이 ApplicationContext 인터페이스를 구현한 클래스의 오브젝트이다. (BeanFactory 인퍼에스 상속)
IoC 컨테이너가 사용하는 빈(bean) 메타정보는 대략 다음과 같다.
- 빈 아이디, 이름, 별칭 : 빈 오브젝트를 구분할 수 있는 식별자
- 클래스 또는 클래스 이름 : 빈으로 만들 POJO 클래스 또는 서비스 클래스 정보
- 스코프 : 싱글톤, 프로토타입과 같은 빈의 생성 방식과 존재 범위
- 프로퍼티 값 또는 참조 : DI에 사용할 프로퍼티 이름과 값 또는 참조하는 빈의 이름
- 생성자 파라미터 값 또는 참조 : DI에 사용할 생성자 파라미터 이름과 값 또는 참조할 빈의 이름
- 지연된 로딩 여부, 우선 빈 여부, 자동와이어링 여부, 부모 빈 정보, 빈팩토리 이름 등
스프링 IoC 컨테이너는 각 빈에 대한 정보를 담은 설정 메타정보를 읽어들인 뒤에, 이를 참고해서 빈 오브젝트를 생성하고 프로퍼티나 생성자를 통해 의존 오브젝트를 주입해주는 DI 작업을 수행한다.
IoC 컨테이너의 종류와 사용방법
StaticApplicationContext => 테스트 목적
GenericApplicationContext
- 가장 일반적인 애플리케이션 컨텍스트의 구현 클래스
- XML 파일과 같은 외부 리소스에 있는 빈 설정 메타정보를 리더를 통해 읽어들여서 메타정보로 전환해서 사용한다.
- 123456XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(ac);reader.loadBeanDefinitions("spring/test/ioc/genericApplicationContext.xml");// XmlBeanDefinitionReader는 기본적으로 클래스패스로 정의된 리소스로부터 파일을 읽는다.ac.refresh(); // 모든 메타정보가 등록이 완료됐으니 애플리케이션 컨테이너를 초기화하라는 명령Hello hello = ac.getBean("hello", Hello.class);hello.print();
cs
GenericXmlApplicationContext
- GenericApplicationContext를 사용하는 경우에는 번거롭게 XmlBeanDefinitionReader를 직접 만들지 말고, 이 두개의 클래스가 결합된 GenericXmlApplicationContext를 사용하면 편리
- 12345GenericApplicationContext ac = new GenericXmlApplicationContext("spring/test/ioc/genericApplicationContext.xml");// XML을 읽어들이고Hello hello = ac.getBean("hello", Hello.class);hello.print();
cs
WebApplicationContext(XmlWebApplicationContext, AnnotationConfigWebApplicationContext)
- 가장 많이 사용되는 어플리케이션 컨텍스트
- 모두 main 메소드가 존재해야 하나, 웹애플리케이션은 동작하는 방식이 근본적으로 다르다.
- 독립 자바 프로그램은 VM에게 main()메소드를 가진 클래스를 시작시켜 달라고 요청할 수 있다. 하지만 웹에서는 main()메소드를 호출할 방법이 없다. 게다가 사용자도 여럿이며 동시에 웹 애플리케이션을 사용한다.
- 그래서 웹 환경에서는 HTTP요청을 받아서 해당 요청에 매핑되어 있는 서블릿을 실행해주는 방식으로 동작한다. 서블릿이 일종의 main()메소드와 같은 역할을 하는 셈이다.
- 일단 main() 메소드 역할을 하는 서블릿을 만들어 두고, 미리 애플리케이션 컨텍스트를 생성해둔 다음, 요청이 서블릿으로 들어올 때마다 getBean()으로 필요한 빈을 가져와 정해진 메소드를 실행해주면 된다.
- 스프링은 이런 웹 환경에서 애플리케이션 컨텍스트를 생성하고 설정 메타 정보로 초기화해주고, 클라이언트로부터 들어오는 요청마다 적절한 빈을 찾아서 이를 실행해주는 기능을 가진 DispatcherServlet이라는 이름의 서블릿을 제공한다. 스프링이 제공해준 서블릿을 web.xml에 등록하는 것만으로 웹 환경에서 스프링 컨테이너가 만들어지고 애플리케이션을 실행하는 데 필요한 대부분의 준비는 끝이다.
- 웹 애플리케이션에 만들어지는 스프링 IoC컨테이너는 WebApplicationContext 인터페이스를 구현한 것임을 기억해두자.
반응형
'프로그래밍 노트 > SPRING' 카테고리의 다른 글
[Spring] IoC(InversionOfControl) 컨테이너 4 (0) | 2018.08.27 |
---|---|
[Spring] IoC(InversionOfControl) 컨테이너 3 (0) | 2018.08.08 |
[Spring] IoC(InversionOfControl) 컨테이너 1 (0) | 2018.08.08 |
[Spring] 스프링프레임워크의 특징 (0) | 2018.08.08 |
[Spring] Spring AOP(Aspect Oriented Programming)1 (0) | 2018.07.01 |