Development/Spring Boot
[Spring Boot] 스프링 컨테이너와 스프링 빈 (1) 생성 과정
sky Jeong
2022. 8. 13. 20:12
1- 스프링 컨테이너가 생성되는 과정
- ApplicationContext
= 스프링 컨테이너
= 인터페이스 - 스프링 컨테이너는 XML 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있음
직전에 AppConfig를 사용한 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것 - 요즘은 XML 형식 보다는 애노테이션 기반으로 스프링 컨테이너를 만듦
- 스프링부트 자체가 애노테이션 기반에 작동이 편리하게 되어있기 때문 - 자바 설정 클래스를 기반으로 스프링 컨테이너(ApplicationContext) 만들기
new AnnotationConfigApplicationContext( AppConfig.class );
AnnotationConfigApplicationContext는 ApplicationContext 인터페이스의 구현체임 - 참고
- 스프링 컨테이너를 부를때 BeanFactory, ApplicationContext로 구분해 말함. (나중 설명 예정)
- BeanFactory를 직접 사용하는 경우는 거의 없어 일반적으로 ApplicationContext를 스프링 컨테이너라 함
2- 스프링 컨테이너 생성
- 스프링 컨테이너 생성
- 스프링 컨테이너 생성시 구성 정보 지정 ( 구성 정보는 AppConfig.class ) - 스프링 빈 등록
- 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해 스프링 빈 등록
- 빈 이름: 메서드 명 , 빈 객체: 리턴에서 넘겨주는 객체
- 참고로 빈 이름은 name을 통해 직접 부여 가능하나, 관례적으로는 메서드명을 그대로 사용함
@Bean ( name = "beanServiceName" )
- 허나 빈(Bean) 이름은 항상 다른 이름 부여해야 함.
같은 이름이 부여되어있을 경우 기존 빈을 덮어버리건 설정에 따라 오류가 발생함 (최근에는 경고 날리고 튕겨버림) - 스프링 빈 의존관계 설정 - 준비 & 완료
- 스프링 컨테이너에 객체 준비
- 이후 스프링 컨테이너는 설정 정보를 참고해 의존 관계를 주입(DI)함
- 단순히 자바 코드를 호출하는 것 같으나, 해당 차이는 싱글톤 컨테이너에서 설명 예정
- 참고.
스프링 빈을 생성하고 의존관계를 주입하는 단계가 나누어져 있음. (스프링의 라이프사이클)
이렇게 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한 번에 처리됨.
추가로 의존관계가 자동으로 주입되는 경우가 존재함. 이때는 단계가 두 단계로 나누어짐.
3- 정리
- 스프링 컨테이너를 생성하고, 설정(구성( 정보를 참고해 스프링 빈 등록 및 의존관계 설정까지 완료한 것임
- 이제 스프링 컨테이너에서 데이터 조회 수행