Sptring IoC 컨테이너와 Bean

hwanse·2021년 2월 9일
0

Spring

목록 보기
2/4

학습 목표

  1. IOC 컨테이너란?
  2. Bean


IOC 컨테이너

  • IOC(Inversion Of Control) : 의존 관계 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는 것이 아닌, 주입을 받아서 사용하는 방법

스프링 IOC 컨테이너
Spring 애플리케이션에서 컴포넌트들의 중앙 저장소, Bean 설정 소스로 부터 Bean 정의를 읽어들이고, Bean을 구성하고 제공해주는 컨테이너. 또한 실제 IOC 컨테이너는 ApplicationContext 인터페이스를 구현한 클래스의 오브젝트이다.

BeanFactory
스프링 프레임워크의 interface이며, 이 interface는 모든 유형의 개체를 관리할 수 있는 메커니즘을 제공한다. ApplicationContext는 이 BeanFactory의 하위 interface다.

특징

  • Spring AOP 기능과 쉽게 통합
  • MessageResource 처리 가능 (국제화)
  • Event 발행
  • 웹 애플리케이션에서 사용하기 위한 WebApplicationContext 같은 애플리케이션 계층 특정 컨텍스트 지원


Bean

스프링 IOC 컨테이너가 관리하는 객체, Bean은 Spring IOC 컨테이너에 의해서 인스턴스화되고 조립 및 관리되는 객체이다.

특징

  • 의존성 관리의 대상이 된다
  • Scope
    • Singleton : 객체가 1번만 생성되는 것
    • ProtoType : 객체가 매번 새로 생성되는 것
  • 라이프사이클 인터페이스 지원 가능


Metadata 설정

스프링에서 IOC 컨테이너 구성하기 위한 메타 정보를 설정해주어야한다. 기본적으로 xml 형식을 통해 컨테이너 구성하기 위한 메타 데이터를 기술할 수 있으며, 이외에도 애노테이션 기반, java 파일 기반으로 컨테이너 구성이 가능하다.
+) 추가적으로 xml형식, groovy형식, properties형식, yml형식도 가능하다

  • 애노테이션 방식 : Spring 2.5 부터 주석 기반 메타 데이터 지원
  • java 방식 : Spring 3.0 부터 java 파일을 통한 구성이 가능하며, 현재 스프링 부트가 이 방식을 채택하여 구성되어 있다.


예제

다음은 위 개념들인 기술을 사용하는 예시다.

				- BookRepository 클래스 -

				- BookService 클래스 -

                    	 - application.xml(metadata config) -

위 application.xml 파일의 내용과 위 class 파일들을 비교하면서 보자

먼저 <bean> 태그들이 있으며 그 안에 id, class 속성이 있다.
Bean 태그는 실제 IOC 컨테이너가 관리해줄 대상이 되는 Bean 객체들의 정보를 명시하는 태그다

  • id : bead 의 id 정보, 이는 IOC컨테이너에 Bean으로 등록할 클래스명을 넣어주는 것이다. 표준은 camel 케이스 형식으로 id 값을 명시해주어야 한다.
  • class : Bean 클래스가 위치하는 실제 정보를 명시해주어야한다.

<property> 태그는 다음과 같다 등록할 Bean 내부에 필드에 대한 참조를 명시하는 태그

  • name : setter 메소드를 먼저 선언해주고 해당 필드명을 명시하는 것이다.
  • ref : 해당 필드에 주입해줄 Bean 참조 정보를 명시, 예시에서는 BookRepository에 대한 의존성이 있으므로 BookRepository에 대한 Bean의 id 값을 명시한다.

application.xml 파일을 통해 IOC컨테이너를 구성하는 metadata 들을 기술해주었다. 비유를 하자면 application.xml은 일종의 설계도와 비슷한 역할을 해주는 것이다.

		                 - 테스트 코드 -
                                 

ApplicationContext 구현을 통해 IOC가 관리해주는 Bean 정보들을 꺼내오는 것이 가능하다.

ClassPathXmlApplicationContext 생성자에 metadata를 기술한 application.xml의 classpath 값을 인자로 넣어주면 해당 생성자가 인자로받은 xml 파일을 읽어 IOC 컨테이너를 구현화해서 ApplicationContext 타입 변수로 받을 수 있다.

이제 이 IOC 컨테이너를 활용해서 해당 컨테이너에 관리되고 있는 Bean 객체들의 정보를 읽고, 해당 객체를 주입받는 것이 가능해진다.




참고 출처

profile
만사가 귀찮은 ISFP가 쓰는 학습 블로그

0개의 댓글