본문 바로가기

TIL/Spring

[Spring] Spring IoC(제어의 역행)-bean factory

IoC(Inversion of Control)란?

프로그램을 구동하는데 필요한 객체에 대한 생성, 변경 등의 관리를 프로그램을 개발하는 사람이 아닌 프로그램을 구동하는 컨테이너에서 직접 관리하는 것을 말한다.

스프링은 IoC 구조를 통해 구동 시 필요한 객체의 생성부터 생명 주기까지 해당 객체에 대한 관리를 직접 수행한다.

 

IoC 컨테이너

스프링에서는 관리하는 객체를 'Bean(빈)'이라고 하고, 해당 빈들을 관리한다는 의미로 컨테이너를 'Bean Factory'라고 한다.

 

IoC 컨테이너의 역할

1. 객체의 생명주기와 의존성을 관리한다.

2. VO(DTO/POJO) 객체의 생성, 초기화, 소멸 등의 처리를 담당한다.

3. 개발자가 직접 객체를 생성할 수 있지만 해당 권한을 컨테이너에 맡김으로써 소스 코드 구현의 시간을 단축할 수 있다.

 

IoC 컨테이너와 Bean 객체

빈(Bean)

- 스프링이 직접 생성과 제어를 담당하는 객체

빈 팩토리(BeanFactory)

- Bean을 등록, 생성, 조회, 반환하는 기능을 담당

- getbean() 메소드가 정의되어 있다.

애플리케이션 컨텍스트(Application Context)

- BeanFactory를 확장한 IoC 컨테이너

설정 메타정보(Configuration metadata)

- IoC를 적용하기 위해 사용하는 설정 정보

GenericXml Application Context

- ApplicationContext를 구현한 클래스

- 일반적인 XML 형태의 문서를 읽어 컨테이너 역할을 수행한다.

 

maven repository에서 관련 jar파일들을 다운받는다.

대신 같은 버전으로 통일시킬 것! 

 

xmlconfig

MemberDTO 생성

 

BeanFactory란?
- 스프링 컨테이너의 최상위 컨테이너이며, ApplicationContext와 함께 스프링 컨테이너라고 한다. 
- Bean의 생성과 설정, 관리 등의 역할을 맡고 있다.
MemberDTO(POJO) 클래스와 spring-context(Configuration) XML 설정 정보를 이용해서 bean 등록, 생성 예제 확인 

 

spring-context.xml 생성

 

MemberDTO bean등록

 

- ApplicationContext의 하위 구현체인 GenericXmlApplicationContext는 XML 설정 메타정보를 읽어와서 BeanFctory를 동작 시킨다.
- GenericXmlApplicationContext는 설정 메타 정보가 담긴 XML 파일의 경로를 클래스패스 하위 경로 전부 기술해야 설정 파일을 읽어온다.

 

1. bean의 id를 이용해 bean을 가져오는 방법
- id를 이용하는 경우 bean의 정확한 타입을 유추할 수 없기 때문에 Object 타입으로 반환하므로 다운캐스팅 필요

 

2. bean의 클래스 메타 정보를 전달하여 가져오는 방법

- 가져오려는 bean의 타입이 명확하기 때문에 형변환이 필요 없다.

 

3. bean의 id와 클래스 메타 정보를 전달하여 가져오는 방법


javaconfig

ContextConfiguration 클래스 생성

- 이 클래스가 설정 메타 정보를 가지고 있다는 의미를 가진 어노테이션을 추가한다. 
- 컨테이너를 생성할 시 해당 어노테이션이 달린 클래스를 먼저 인식하여 컨테이너를 설정한다. 

 

bean을 등록하기 위해서는 @Bean 어노테이션을 이용한다.
- @Bean(name="myName") 혹은 @Bean("myName")을 이용하여 bean의 id를 설정할 수 있다.
- 이 때 bean의 이름을 지정하지 않으면 메소드의 이름을 bean의 id로 자동 인식한다.

 

MemberDTO 상단과 동일

 

Application 클래스

- AnnotationConfigApplicationContext라는 어노테이션 설정 정보를 읽어서 컨테이너 설정을 하는 구현체 이용한다. 
- 인자로 @Configuration 어노테이션이 달린 설정 클래스의 메타 정보를 전달하여 인스턴스를 생성한다.

 

'TIL > Spring' 카테고리의 다른 글

[Spring] Handler Method Parameter  (0) 2022.04.15
[Spring] 개념정리-2  (0) 2022.04.12
[Spring] 개념 정리-1  (0) 2022.04.12
[Spring] SpringIoC - Component Scan (excludeFilters, includeFilters)  (0) 2022.04.06