Dev/Spring

[Spring] 스프링 컨테이너 생성 및 조회

yo0oni 2023. 9. 12. 16:32

인프런 김영한 선생님 스프링 핵심 원리 강의를 보고 정리한 내용입니다.

 


 

스프링 컨테이너 생성

ApplicationContext applicationContext =
			new AnnotationConfigApplicationContext(AppConfig.class);
  • ApplicationContext를 스프링 컨테이너라 한다.
  • ApplicationContext는 인터페이스이다. (다형성 적용)
  • 스프링 컨테이너는 어노테이션 기반의 자바 설정 클래스로 만들 수 있다.

 

스프링 컨테이너의 생성 과정

1. 스프링 컨테이너 생성

  • new AnnotationConfigApplicationContext(AppConfig.class);
  • 스프링 컨테이너를 생성할 때는 구성 정보를 지정해 주어야 하며, AppConfig.class를 구성 정보로 지정하였다.

 

2. 스프링 빈 등록

  • 스프링 컨테이너는 파라미터로 넘어온 설정 클래스 정보를 사용해서 스프링 빈을 등록한다.
  • 빈 이름은 메서드 이름이다.
  • 빈 객체는 반환값이다.
주의사항
빈 이름은 항상 다른 이름으로 부여해야 한다. 같은 이름을 부여하면 빈이 무시되거나 덮어씌워진다.

 

3. 스프링 빈 의존관계 설정

  • 스프링 컨테이너는 설정 정보를 참고해서 의존관계를 주입(DI)한다.

 

 

컨테이너에 등록된 빈 조회

모든 빈 조회하기

  • ac.getBeanDefinitionNames() : 스프링에 등록된 모든 빈 이름을 조회한다.
  • ac.getBean() : 빈 이름으로 빈 객체를 조회한다.

 

애플리케이션 빈 조회하기

  • 스프링 내부에서 사용하는 빈은 제외하고, 본인이 등록한 빈만 출력할 수 있다.
  • 스프링이 내부에서 사용하는 빈은 getRole()로 구분할 수 있다.
    • ROLE_APPLICATION : 일반적으로 사용자가 정의한 빈
    • ROLE_INFRASTRUCTURE : 스프링이 내부에서 사용하는 빈

 

동일한 타입이 둘 이상일 때 빈 조회하기

  • ac.getBeansOfType()을 사용하면 해당 타입의 모든 빈을 조회할 수 있다.
  • 같은 타입의 빈이 둘 이상이면 오류가 발생하므로 빈 이름을 지정해주어야 한다.