📖 ✏️
- TIL 시리즈에 작성된 글은 '매일 매일 학습한 지식 조각을 메모해 놓은 포스팅'입니다. 공유가 아닌 개인적인 학습 내용 기록을 목적으로 작성되었음을 알려드립니다.
- 그 외 시리즈에 작성된 공유 목적의 포스팅은 시간이 날 때마다 별도로 작성하고 있습니다. 주로, TIL 시리즈에 작성된 내용에서 특정 주제를 선정하고, 더 깊이 공부한 후 정리하여 작성합니다.
일반적으로 ApplicationContext 객체를 스프링 컨테이너라고 부른다. ApplicationContext는 인터페이스이다. 컨테이너 생성 방식에 따라 사용할 수 있는 인터페이스의 구현체가 다르다. 스프링 컨테이너는 애노테이션 기반의 자바 설정 클래스로 만드는 경우가 많다. xml을 기반으로 만들 수도 있다.
가장 많이 사용하는 애노테이션 기반 자바 설정 클래스는 AnnotationConfigApplicationContext 객체를 사용한다. 아래와 같이 생성자 파라미터에 설정 클래스를 넣어주어 객체를 생성한다.
//애노테이션 기반의 자바 설정 클래스를 이용하여 스프링 컨테이너 생성
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
new AnnotationConfigApplicationContext(AppConfig.class)
를 통해 스프링 컨테이너(ApplicationContext)객체를 생성하면, 스프링 빈 저장소가 만들어 진다. 자바 코드 방식과 xml 파일 방식 모두 생성자의 파라미터에 스프링 컨테이너의 구성 정보를 담은 파일을 지정해야 한다.
스프링 컨테이너는 파라미터에 등록된 구성 정보 파일을 통해 스프링 Bean을 등록한다. 자바 코드 방식의 경우 별도의 Bean 이름을 지정하지 않으면 메서드명이 Bean의 이름으로 사용된다. 만약, Bean의 이름을 별도 지정하려면 @Bean(name="이름")
을 이용한다.
Bean 이름은 중복되지 않도록 한다. 같은 이름을 등록하게 되면 다른 Bean이 무시되거나, 기존 Bean을 대치한다. 오류가 발생할 가능성이 크다.
스프링 컨테이너는 설정 정보를 참고해서 의존 관계를 주입(DI)한다. 단순히 메서드의 반환 객체를 받아 오는 듯 보이지만, 싱클톤을 사용한다는 차이가 있다.
원래 스프링은 Bean을 생성하는 단계와 의존 관계를 주입하는 단계가 나누어져 실행된다. 하지만 자바 코드 방식으로 스프링 Bean을 등록하면 생성자를 호출하면서 의존관계 주입이 한번에 이루어진다.
스프링 컨테이너가 생성되고, 설정(구성) 정보에 따라 스프링 Bean 등록과 의존 관계가 설정된다. 등록과 설정이 완료되면 스프링 Bean을 사용(조회)할 수 있다.