1- 어노테이션
- AppConfig 파일
@Configuration
- 설정 정보 (구성 정보) 파일이라는 것을 명시함
- 스프링에서는 설정 정보 파일에 ' @Configuration '이 선언되어야 함
- Import는 ' org.springframework.context.annotation.Configuration '
@Bean
- @Bean을 선언하면 Spring Container에 등록됨
2- 스프링 설정하기
- ApplicationContext 를 선언함
- 스프링은 ApplicationContext라는 곳에서 시작됨
- 이는 스프링 컨테이너임
- 또한 얘가 @Bean이 되어 있던 애들을 모두 관리해줌
- 생성자에 AppConfig.class 를 넘겨줌으로 AppConfig에 있는 환경 설정 정보를 기반으로 스프링이 AppConfig 안에 있는 어노테이션에 기반해 스프링 컨테이너 안에 객체를 생성해서 관리함
ApplicationContext applicationContext = new AnnotcationConfigApplicationContext( AppConfig.class ); - 기존에는 AppConfig 생성자를 통해 필요한 객체들을 가져왔으나, 이제는 applicationContext를 통해 필요한 객체를 가져올 수 있음
3. 실행하면 밑에 이미지 같이 나옴
로그 분석해보자면
23:44:39.519 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalConfigurationAnnotationProcessor'
23:44:39.698 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerProcessor'
23:44:39.702 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.event.internalEventListenerFactory'
23:44:39.705 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalAutowiredAnnotationProcessor'
23:44:39.706 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'org.springframework.context.annotation.internalCommonAnnotationProcessor'
- 이 위에 다섯개는 스프링이 필요해서 생성되는 것
23:44:39.718 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'appConfig'
23:44:39.723 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'memberService'
23:44:39.745 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'memberRepository'
23:44:39.746 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'orderService'
23:44:39.747 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - Creating shared instance of singleton bean 'discountPolicy'
- 얘네는 우리가 Bean을 선언해서 생성되는 것
3- 스프링 컨테이너(Spring Container)
- ApplicationContext를 스프링 컨테이너라 함
- 기존에 개발자가 AppConfig를 사용해 객체를 생성하고 DI(의존성 주입)을 했지만, 스프링 컨테이너를 통해 사용함
- 스프링 컨테이너는 @Configuration이 붙은 AppConfig를 설정(구성) 정보로 사용함
- @Bean이라 적힌 메서드를 모두 호출해 반환된 객체를 스프링 컨테이너에 등록함. 등록된 객체를 스프링 빈이라 함.
- 스프링 빈은 @Bean이 붙은 메서드의 명을 스프링빈의 이름으로 사용함
- 이전에는 개발자가 직접 AppConfig를 찾아 직접 조회했으나, 이제부터는 스프링 컨테이너를 통해 필요한 스프링 빈을 찾아야 함
- 스프링 빈은 applicationContext.getBean( "스프링 빈 이름", 타입 )을 통해 찾을 수 있음
- 이로 스프링 컨테이너에 객체를 스프링 빈으로 등록해 스프링 컨테이너에서 스프링 빈을 찾아 사용하도록 변경됨
4- 스프링 컨테이너 사용의 장점
- 스프링 컨테이너가 관리해줌으로써 할 수 있는 것이 다양함.
- 스프링 컨테이너를 통해 어떤 프로젝트에서도 DI와 같은 것들을 스프링 컨테이너가 관리해줌으로 범용의 프레임워크가 생긴 것임.
- 이후 강의에서 더 설명 예정.
'Development > Spring Boot' 카테고리의 다른 글
[Spring Boot] 스프링 컨테이너와 스프링 빈 (1) 생성 과정 (0) | 2022.08.13 |
---|---|
[Spring Boot] 스프링 컨테이너와 스프링 빈 (0) - 이전 강의 중요 포인트 정리 (0) | 2022.08.13 |
[Spring Boot] IoC, DI, 컨테이너 (0) | 2022.08.05 |
[Spring Boot] 새로운 구조 및 구현체 적용 (0) | 2022.08.04 |
[Spring Boot] AppConfig 리팩토링 (0) | 2022.08.04 |