이전 시간에 이어서 DI, IoC컨테이너를 스프링 컨테이너로 바꿔봅시다.
목차
- 컨테이너 생성 과정
- 컨테이너 생성 방법
- 싱글톤 패턴
스프링 컨테이너란?
프레임워크를 사용해서 빈을 생성하고 관리하는 저장소
종류
스프링 컨테이너는 BeanFactory와 ApplicationContext가 있습니다.
둘의 구분은 상속관계를 보면 알 수 있듯이 ApplicationContext가 더 기능이 많습니다.
생성 방법
- 컨테이너 생성
- 빈 등록
먼저 컨테이너를 생성해봅시다.
ApplicationContext ac = new AnotationConfigApplicationContext(AppConfig.class);
//AppConfig클래스를 스프링 컨테이너로 등록하겠다.
그러면 빈 이름과 객체로 구성된 저장소가 생성됩니다.
빈 등록은 @Bean어노테이션을 사용하면 됩니다.
그림처럼 해당하는 빈 이름과 객체에 저장됩니다.
생성 과정
생성과정에 대해선 알았으니 생성 방법에 대해서 알아봅시다.
생성 방법은 대표적으로 Java방식과 xml방식이 있습니다.
각 방법에 맞는 컨테이너를 생성해줍니다.
//자바 기반
ApplicationContext ac = new new AnnotationConfigApplicationContext(AppConfig.class);
//xml 기반
ApplicationContext ac = new new GenericXmlApplictionContext(AppConfig.class);
자바 기반
단순하다. @Configuration과 @Bean을 달아주면 됩니다.
참고로 @Configuration이 없어도 빈을 등록하는데 무리가 없습니다. 하지만 싱글톤 컨테이너를 만들기 위해 꼭 필요합니다.
xml기반
/resources/appConfig.xml
싱글톤 컨테이너
우선 싱글톤 패턴에 대해서 알아봅시다
클래스의 객체가 딱 1개만 생성되도록 하는 패턴
- static 영역에 객체를 1개 생성
- public static으로 객체를 받을 수 있는 메서드 생성
- private로 생성자를 선언해서 접근을 막음
public class SingletonService {
private static final SingletonService instance = new SingletonService();
public static SingletonService getInstance() {
return instance;
}
private SingletonService() {}
}
그럼 왜 싱글톤 패턴을 적용해야 할까요?
만약 싱글톤 패턴을 적용하지 않는다면 AppConfig는 요청을 받을 때마다, 새로운 객체를 생성해야 합니다. 왼쪽 그림처럼.. 하지만 싱글톤 패턴을 적용하면 하나의 객체만 공유할 수 있습니다.
그럼에도 불구하고 DI 컨테이너의 싱글톤 패턴의 문제점은 있습니다.
DIP, OCP를 위반할 가능성이 높습니다.
이런 문제점을 해결하기 위해 스프링 컨테이너를 쓰면 되고 @Configuration 어노테이션으로 인해 싱글톤 패턴까지 적용됐습니다.
출처
김영한. 스프링 핵심 원리 - 기본 편
'웹 > 백엔드, Spring' 카테고리의 다른 글
[Java] IoC, DI, 컨테이너 (0) | 2021.07.21 |
---|---|
[Java] Spring과 SOLID - 2편 (0) | 2021.07.19 |
[Java] Spring과 SOLID - 1편 (1) | 2021.07.19 |
[간단한 게시판 만들기] - 3. 게시글 쓰기 (0) | 2020.10.19 |
[간단한 게시판 만들기] - 2. 로그인 기능( 세션, 쿠키 설정) (0) | 2020.10.17 |