*스프링 컨테이너가 어떻게 생성될까?
AnnotationConfigApplicationContext객체 생성 시 AppConfig.class를 파라미터로 넘기고, applicationContext가 반환되었었다. ApplicationContext ->스프링 컨테이너/인터페이스(다형성이 적용 되어있음. 이를 구현한 것 중 하나가 AnnotationConfigApplicationContext(annotationConfig 기반 스프링)이다.).
-스프링은 XML기반(잘 사용 X) / Annotation기반(편리해서 많이 사용) 자바 설정 클래스로 만들 수 O. -> new로 생성하고 appconfig를 파라미터로 넣어줌.
//스프링 컨테이너 생성
ApplicationContext applicationContext =
new
AnnotationConfigApplicationContext(AppConfig.class);
>스프링 생성 과정
1)스프링 컨테이너 생성
1)스프링 컨테이너 생성
new AnnotationConfigApplicationContext로 appConfig의 정보를 줌.
->스프링 컨테이너 생성(스프링 빈 저장소가 안에 있음(키는 빈의 이름이 되고 값은 빈의 객체가 됨) //스프링 컨테이너 생성 시 구성 정보를 지정해줘야 하는데 그게 바로 AppConfig(구성 정보)를 파라미터로 넣어준 것. 이정보를 보고 객체 생성
2)스프링 빈 등록
구성 정보를 넘기고 @Bean이 붙은 모든 것을 다 호출하고, 메소드 이름을 키 값으로 하여 빈 이름으로 저장, 반환 객체를 빈 객체로 등록. +)빈 이름은 직접 부여도 가능은 한데 빈이름은 항상 다른 이름을 부여해야 함.
3)스프링 빈 의존관계 설정-준비
4)의존 관계 설정 완료
의존관계를 주입(DI). 동적인 의존 관계를 스프링이 다 연결. 객체의 참조값들이 다 연결.
자바 코드를 호출하는 것 같지만, 차이가 O, 차이는 뒤에 싱글톤 컨테이너에서 설명.
스프링은 빈을 생성하고, 의존관계를 주입하는 단계가 나누어져 있음(스프링 빈 객체 생성하고 엮어줌.)
그런데 이렇게 자바 코드로 스프링 빈을 등록 시 생성자를 호출하면서 의존관계 주입도 한번에 처리.
=>컨테이너에 빈이 잘 등록되었는지 확인
//junit5부터는 public사용 안해도됨.
getBeanDefinitionNames()로 :스프링에 등록된 모든 빈 이름을 조회
+)list같은 게 있을 때 iter + tab키 -> 자동으로 for문 완성.
getBean으로 빈 꺼내는데 타입 정의하지 않았기에 object로 꺼냄.
만약 스프링 내부에 있는 것은 제외하고 내가 등록한 빈만 보고 싶다면? -> 애플리케이션 빈만 출력하면 됨.
빈 하나하나에 대한 메타 데이터 정보인 beanDataDefinition을 이용하여 꺼낼 수 O.
getRole()을 사용(조건엔 따라 애플리케이션 개발 위해 등록한 빈을 반환)
+)Role_Infrastructure은 스프링 컨테이너 내부에서 사용하는 빈들.
'스프링 > 입문' 카테고리의 다른 글
다형성 (0) | 2022.09.04 |
---|---|
스프링이란? (0) | 2022.09.04 |
AOP (0) | 2022.09.04 |
스프링 컨테이너와 스프링 빈 (3) (0) | 2022.09.04 |
스프링 컨테이너와 스프링 빈 (2) (0) | 2022.09.04 |