이 포스트는 인프런 사이트에 김영한 - 스프링 핵심원리 강의를 보고 정리한 포스터입니다.
스프링 핵심 원리 - 기본편 강의 | 김영한 - 인프런
김영한 | , 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보세요! 📢 수강 전 확인해주세요! 본 강의는 자바 스프링 완전 정복 시리즈의 두 번째 강의입니다. 우아한형제들 최연
www.inflearn.com
스프링 컨테이너가 생성되는 과정을 알아보겠습니다.
🔅 스프링 컨테이너(Spring Container) ?
스프링 컨테이너는 스프링 프레임워크에서 객체의 생성, 관리, 소멸을 담당하는 핵심 요소입니다.
IoC(Inversion of Control, 제어의 역전) 개념을 기반으로 객체(빈, Bean)의 생명 주기를 관리해야합니다.
🔅 스프링 컨테이너 생성
//스프링 컨테이너 생성
ApplicationContext applicationContext = new AnnotationConfigapplicationContext(AppConfig.class);
▪️ 스프링 컨테이너를 만들기 위해 ApplicationContext 인터페이스 구현체를 사용합니다.
▪️ ApplicationContext를 스프링 컨테이너라고 하며, 인터페이스입니다.
▪️ 스프링 컨테이너는 XML을 기반으로 만들 수 있고, 애노테이션 기반의 자바 설정 클래스로 만들 수 있습니다.
▪️ 직전에 AppConfig를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것입니다.
🔅 스프링 컨테이너 생성 과정
🌀 1. 스프링 컨테이너 생성
▪️ new AnnotationConfigApplicationContext(AppConfig.class)는 자바 기반 설정 구현체입니다.
▪️ new AnnotationConfigApplicationContext(AppConfig.class)를 사용하여 스프링 컨테이너를 생성합니다.
▪️ 스프링 컨테이너를 생성할 때는 구성 정보를 지정해줘야 하는데, 여기서는 빈 설정 정보(AppConfig.class)를 구성 정보로 지정했습니다.
▪️ AppConfig.class의 설정 정보를 기반으로 어떤 객체를 빈으로 등록할 것인지 결정합니다.
🌀 2. 스프링 빈 등록
▪️ 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서
@Bean이 붙은 메서드를 찾아 스프링 빈을 등록합니다.
▪️ 각 빈은 이름과 객체 인스턴스로 구성된 스프링 빈 저장소에 등록됩니다.
예제에서는 memberService, orderService, memberRepository, discountPolicy 4개의 빈이 등록되었습니다.
memberService() 메서드가 @Bean으로 등록되었으므로, 빈 이름도 memberService가 됩니다.
빈 이름
▪️ 빈 이름은 메서드 이름을 사용합니다.
▪️ 빈 이름을 직접 부여할 수 있습니다.
@Bean(name = "memberService2")
🎈 주의할 점 !
빈 이름은 항상 다른 이름을 부여해야 합니다.
같은 이름을 부여할 시, 다른 빈이 무시되거나 기존 빈을 덮어벼려 오류가 발생합니다.
🌀 3. 스프링 빈 의존 관계 설정 - 준비
▪️ AppConfig.class에서 각 빈을 생성할 때 다른 빈을 주입하는 방식으로 의존 관계를 설정합니다.
▪️ memberService()는 memberRepository()를 사용하고, orderService()는 memberRepository()와 discountPolicy()를 사용합니다.
▪️스프링 컨테이너는 빈을 생성 순서에 맞게 등록하고, 의존 관계를 설정한다.
▪️memberService는 memberRepository 빈이 필요하므로, memberRepository() 메서드에서 반환된 객체를 주입한다.
🌀 4. 스프링 빈 의존관계 설정 - 완료
▪️ 스프링 컨테이너는 AppConfig.class의 설정 정보를 읽고, 의존관계를 주입합니다.
▪️ memberService는 memberRepository를 의존하며, orderService는 memberRepository와 discountPolicy를 의존한다.
▪️ 이를 통해 객체 간의 관계가 완성됩니다.
전체 과정 정리
1️⃣ 스프링 컨테이너 생성
new AnnotationConfigApplicationContext(AppConfig.class)를 통해 컨테이너를 생성하고 빈 저장소를 만듭니다.
2️⃣ 스프링 빈 등록
@Bean이 붙은 메서드를 찾아 빈 저장소에 등록합니다.
3️⃣ 스프링 빈 의존 관계 설정 - 준비
AppConfig.class에서 생성자 주입을 활용하여 빈 간의 의존 관계를 설정합니다.
4️⃣ 스프링 빈 의존 관계 설정 - 완료
스프링 컨테이너는 의존성을 자동으로 주입하여 객체 간의 관계를 완성합니다.
'개발일지 > Spring' 카테고리의 다른 글
BeanFactory와 ApplicationContext (0) | 2025.02.13 |
---|---|
스프링 빈 조회 (0) | 2025.02.13 |
Spring Bean (0) | 2025.02.07 |
Spring에서 AppConfig란? (0) | 2025.02.07 |
동시성 문제를 고려한 HashMap<>() 선택하기 (0) | 2025.02.07 |