Study/Spring
[스프링 핵심 원리 - 기본편] 스프링 컨테이너와 스프링 빈(스프링 컨테이너 생성)
black6765
2022. 12. 21. 21:33
스프링 컨테이너 생성
- 스프링 컨테이너가 생성되는 과정
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
- ApplicationContext를 스프링 컨테이너라고 함
- ApplicationContext는 인터페이스
- 이를 구현한 것 중 하나가 AnnotationConfigApplicationContext임
- 스프링 컨테이너는 XML 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로도 만들 수 있음
- 요즘에는 XML 기반은 잘 사용하지 않음
- 애노테이션 기반이 편리하기 때문에 대부분 애노테이션 기반 방식을 사용
- 직전에 AppConfig를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것
- 참고: 더 정확히는 스프링 컨테이너를 부를 때 BeanFactory, ApplicationContext 로 구분해서 이야기한다.
- BeanFactory 를 직접 사용하는 경우는 거의 없으므로 일반적으로 ApplicationContext 를 스프링 컨테이너라 한다.
스프링 컨테이너의 생성 과정
1. 스프링 컨테이너 생성
- new AnnotationConfigApplicationContext(AppConfig.class)
- 스프링 컨테이너를 생성할 때는 구성 정보를 지정해주어야 함
- 여기서는 AppConfig.class를 구성 정보로 전달
- 스프링 빈 저장소의 key는 빈 이름, value는 빈 객체가 됨
2. 스프링 빈 등록
- 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용하여 스프링 빈을 등록함
- 메소드 이름을 빈 이름으로, return으로 반환하는 객체를 빈 객체로 등록
- 4개의 new로 생성한 인스턴스 객체가 등록이 됨
- 이를 스프링 빈이라 함
- 빈 이름
- 빈 이름은 보통 메소드 이름을 사용
- 빈 이름을 직접 부여할 수도 있음
- @Bean(name="이름")
- 빈 이름은 항상 다른 이름을 부여해야 함
- 같은 이름을 부여하면, 다른 빈이 무시되거나 기존 빈을 덮어버리거나 설정에 따라 오류가 발생
3. 스프링 빈 의존관계 설정 - 준비
- 오른쪽의 초록색 원들이 스프링 빈
4. 스프링 빈 의존관계 설정 - 완료
- 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)
- 단순히 자바 코드를 호출하는 것 같지만, 차이가 있음
- 이 차이는 뒤의 싱글톤 컨테이너에서 설명
- 참고
- 스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있음
- 그런데 이렇게 자바 코드로 스프링빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한번에 처리됨
- 여기서는 이해를 돕기 위해 개념적으로 나누어 설명
- 자세한 내용은 의존관계 자동 주입에서 다시 설명
- 스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있음
※ 본 게시글은 인프런의 스프링 핵심 원리 - 기본편(김영한)을 수강하고 정리한 내용입니다.