Spring
Spring이란?

IOC컨테이너

* IOC컨테이너 ( =spring )

컨테이너란? 인스턴스의 생명주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 제공하도록 하는 것

즉, 내가 작성한 코드의 처리과정을 위임받은 독립적인 존재

( 적절한 설정만 되어있다면 프로그래머가 작성한 코드를 스스로 참조한 뒤 알아서 객체의 생성과 소멸을 관리해준다. )

 

스프링 컨테이너는 스프링 프레임워크의 핵심부에 위치, 종속객체 주입을 이용하여 애플리케이션을 구성하는 컴포넌트들을 관리한다.

-> 프로그래머가 작성한 코드는 컨테이너를 사용하게 됨으로서 프로그래머의 손을 떠나 컨테이너의 영역으로 떠나버리게 된다.

 

[ 스프링 컨테이너의 두 종류 ]

 

1. 빈팩토리 BeanFactory ( org.springframework.beans.facory.BeanFactory )

: DI의 기본사항을 제공하는 가장 단순한 컨테이너

팩토리의 디자인 패턴을 구현한 것. Bean팩토리는 빈을 생성하고 분배하는 책임을 지는 클래스

빈의 정의는 즉시 로딩하는 반면, 빈 자체가 필요하게 되기 전까지는 인스턴스화를 하지 않는다.

 

BeanFactory factory = new XmlBeanFactory(new FileinputStream(“bean.xml”));
MyBean myBean = (Mybean) factory.getBean(“myBean”);

getBean()이 호출되면, 팩토리는 의존성 주입을 이용해 빈을 인스턴스화하고 빈의 특성을 설정하기 시작, 빈의 일생이 시작된다.

 

2. 어플리케이션 컨텍스트 ApplicationContext ( org.springframework.context.factory.BeanFactory )

: 빈팩토리와 유사한 기능을 제공하지만 좀 더 많은 기능을 제공하는 어플리케이션 컨텍스트

 

* 빈팩토리보다 더 추가적으로 제공하는 기능

  • 국제화가 지원되는 텍스트 메세지를 관리해준다.
  • 이미지같은 파일 지원을 로드 할 수 있는 포괄적인 방법을 제공해준다.
  • 리너스로 등록된 빈에게 이벤트 발생을 알려준다.
  • 가장 많이 사용되는 어플리케이션 컨텍스트 구현체
  • ClassPathXmlApplicationContext : 클래스패스에 위치한 xml파일에서 컨텐스트 정의 내용을 읽어들인다.
  • FileSystemxmlApplicationContext : 파일 경로로 지정된 xml파일에서 컨텐스트 정의 내용을 읽어들인다.
  • XmlWebApplicationContext : 웹 어플리케이션에 포함된 xml파일에서 컨텐스트 정의 내용을 읽어들인다.
     
ApplicationContext context = new ClassPathXmlApplicationContext(“conf/bean.xml”);
MyBean bean = context.getBean(“myBean”);

 

==> 빈팩토리와 어플리케이션컨텍스트의 또 다른 차이점

- 빈 팩토리 : 처음으로 getBean()이 호출된 시점에서야 해당 빈을 생성

- 어플리케이션 컨텍스트 : 컨텍스트 초기화 시점에 모든 싱글톤 빈을 미리 로드한 후 어플리케이션 기동 후에는 빈을 지연없이 얻을 수 있다.

( 미리 빈을 생성해 놓아 빈이 필요할 때 즉시 사용할 수 있도록 보장 )

 

IOC ( inversion of control, 제어의 역전 )

IOC란? 제어의 역전, 즉 외부에서 제어를 한다는 것 ( = 컨테이너 )

제어권이 넘어가서 객체의 생명주기를 Container들이 전담하게 된다.

-> 객체의 생성에서부터 생명주기의 관리까지 모든 객체에 대한 제어권이 바뀌었다는 것을 의미함.

댓글 0