스프링 컨테이너와 스프링 빈에 대해서 알아보았다.
기존에는 스프링의 핵심원리, 객체지향과
왜스프링이 만들어졌을까? 에 대해서 공부하였다.
스프링 컨테이너 생성
스프링 컨테이너가 생성되는 과정은
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
new AnnotationConfigApplicationContext 객체를 생성하면서 AppConfig를 파라미터로 넘기면
반환값으로 applicationContext가 반환되었다.
ApplicationContext를 스프링 컨테이너라 한다.
ApplicationContext는 인터페이스이다.
AppConfig를 사용했던 방식이 애노테이션 기반의 자바 설정 클래스로 스프링 컨테이너를 만든 것이다.
스프링 컨테이너 생성 과정
1. 스프링 컨테이너 생성
new AnnotationConfigApplicationContext(AppConfig.class)라고 하면서 AppConfig의 정보를 넘긴다.
스프링 컨테이너가 만들어진다. 스프링 컨테이너 안에는 스프링 빈 저장소라는게 있다. 키는 빈 이름
값은 빈 객체가된다.
AppConfig.class를 파라미터로 넘기면 이 정보를 보고 객체생성을 해야겠다고 인지를 하게된다.
2. 스프링 빈 등록
스프링 컨테이너가 생성하면서 스프링 빈 저장소에
스프링 빈을 등록한다. 설정정보를 @Bean을 보고 호출을한다.
메서드 이름을 키로 가지고 값은 객체를 가진다.
이것을 스프링 빈이라고 한다.
빈 이름은 메서드 이름을 사용하는데
임의로 직접 부여할 수 도있다.
빈 이름은 항상 다른 이름을 부여해야한다. 같은 이름을 부여하면
다른 빈이 무시되거나 기존 빈을 덮어버리거나 설정에 따라 오류가 발생한다.
3. 스프링 빈 의존관계 설정 -준비-
스프링 빈을 등록 한 후
4. 스프링 빈 의존관계 설정 -완료-
memberService의 의존관계로memberRepository를 넣어주고
orderService는 memberRepository도 의존하고 discountPolicy도 의존한다.
스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입한다.
단순히 자바 코드를 호출하는 것 같지만, 차이가 있다. 이 차이는 뒤에 싱글톤 컨테이너에서 공부할 것이다.
스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있다.
그런데 이렇게 자바 코드로 스프링 빈을 등록하면 생성자를 호출하면서 의존관계 주입도 한번에 처리된다.
이 그림은 이해를 돕기위해 개념적으로 나누어 설명했다.
'웹프로그래밍 > Spring 핵심 원리' 카테고리의 다른 글
20. 스프링 빈 조회 (0) | 2021.07.19 |
---|---|
19. 컨테이너에 등록된 모든 빈 조회 (0) | 2021.07.16 |
17. 스프링으로 전환하기 (0) | 2021.07.15 |
16. IoC, DI, 그리고 컨테이너 (0) | 2021.07.15 |
15. 좋은 객체 지향 설계의 5가지 원칙의 적용 (0) | 2021.07.15 |