이 글은 백기선 님의 스프링 프레임워크의 핵심 기술 강의를 듣고 복습 차원에서 적은 글입니다.
Inversion of Control은 의존 관계 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는 의존 객체를 직접 만들어 사용하는 게 아니라, 주입받아 사용하는 방법을 말한다.
스프링 IoC 컨테이너
스프링 IoC 컨테이너의 핵심은 ApplicationContext, BeanFactory이다.
실제로 스프링 컨테이너 또는 IoC 컨테이너라고 말하는 것은 바로 ApplicationContext 인터페이스를 구현한 클래스의 오브젝트다. ApplicationContext는 BeanFactory를 상속받고 있다.
그렇다면 IoC컨테이너의 핵심 역할은 무엇일까?
핵심 역할은 빈 설정 소스로부터 빈 정의를 읽어 들이고, 빈을 구성하고 제공한다.
BeanFactory | - Bean을 등록, 생성, 조회, 반환 관리한다. - getBean() 메소드가 정의 되어 있다. |
ApplicationContext | - Spring의 각종 부가 서비스를 추가로 제공한다. (메시지 소스 처리 기능, 이벤트 발행 기능, 리소스 로딩 기능) - BeanFactory를 상속받아 BeanFactory 기능을 그대로 사용한다. |
빈
빈은 객체이다. 하지만 IoC 컨테이너가 관리하는 객체이다.
IoC가 관리하는 객체는 무엇이 좋은 것일까?
- 의존성 관리가 쉽게 가능하다. ex) @Autowired
- 스코프(싱글톤 또는 프로토타입) 설정이 쉽게 가능하다.
- 라이프사이클 인터페이스 제공으로 관리가 쉽게 가능하다. ex) @PostConstruct
그렇다면 빈을 등록하는 방법은?
첫 번째, application.xml에 다음과 같이 하나씩 등록하는 방법이다.
<bean id="bookService" ....
두 번째, 컴포넌트 스캔을 사용하는 방법이다.
// Xml 방식
<context:component-scan base-package=" ....
// Java 방식
@Configuration
@ComponentScan(basePackages = "....
// @componentScan(basePackageclasses = ".class ....
public Class ApplicatonConfig {
...
}
하지만 우리가 사용하는 SpringBoot에서는 다음 어노테이션 하나면 위의 설정들을 알아서 해준다.
...
@SpringBootApplication
public class DemoApplication {
...
}
@SpringBootApplication을 확인하면 @ComponentScan이 있는 것을 확인할 수 있다.
'BackEnd > Spring' 카테고리의 다른 글
[Spring] 스프링(Spring) 핵심 기술 이야기 4부 - 빈의 스코프 (0) | 2020.10.11 |
---|---|
[Spring] 스프링(Spring) 핵심 기술 이야기 3부 - @Component와 컴포넌트 스캔 (0) | 2020.10.07 |
[Spring] 스프링(Spring) 핵심 기술 이야기 2부 - @Autowire (0) | 2020.09.16 |
댓글