스프링 컨테이너
- 기존에는 개발자가 AppConfig를 사용하여 직접 객체를 생성하고 DI 했지만,
현재는 스프링 컨테이너가 한다. - 스프링 컨테이너는 @Configuration이 붙은 클래스를 설정 정보로 사용한다.
- 설정 정보 클래스에서 @Bean이 붙은 메소드명이 스프링 빈의 이름이 된다.
- @Bean 메소드의 반환값이 빈으로 등록된다.
수동으로 빈 등록
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
...
// 빈 이름: memberService
// 빈 객체: MemberServiceImpl 인스턴스
}
- ApplicationContext 를 스프링 컨테이너라고 한다.
- ApplicationContext 는 인터페이스이다.
- 스프링 컨테이너는 애너테이션 혹은 XML 기반으로 만들 수 있다.
// 새 스프링 컨테이너 만들기
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
/**
AnnotationConfigApplicationContext 는
ApplicationContext 인터페이스의 구현체이다.
**/
AppConfig에서 @Bean 어노테이션이 붙은 메소드의 이름 = 빈 이름
그 메소드의 반환 객체 = 빈 객체
- 빈 이름은 모두 다른 이름이어야 한다.
- 스프링 컨테이너는 "빈 이름 : 빈 객체" 형식으로 빈을 저장한다.
- 빈 생성 2. 의존 관계 주입 으로 단계가 나누어져 있다.
스프링 빈 조회 - 기본
ac.getBean(빈 이름, 클래스타입)
: 빈 이름에 해당하는 빈 객체를 가져온다.ac.getBeanDefinitionNames()
: 스프링에 등록된 모든 빈 이름을 조회한다.ac.getBeansOfType()
: 해당 타입의 모든 빈 조회- 조회 대상 빈이 없으면 NoSuchBeanDefinitionException 발생
참고
ac.getBeanDefinition(빈 이름)
: 빈 이름에 해당하는 빈 객체의 메타 데이터 조회
BeanDefinition.ROLE_APPLICATION
: 사용자가 정의한 빈
BeanDefinition.ROLE_INFRASTRUCTURE
: 스프링 내부에서 사용하는 빈
스프링 빈 조회 - 상속 관계
스프링 빈 조회에서 부모 타입으로 조회하면, 자식 타입도 함께 조회된다.
본 강의는 인프런 - 스프링 핵심원리 기본편을 수강하고 정리한 글입니다.
'Spring' 카테고리의 다른 글
컴포넌트 스캔 (0) | 2024.05.20 |
---|---|
싱글톤 패턴과 싱글톤 컨테이너 (0) | 2024.05.20 |
BeanFactory와 ApplicationContext (0) | 2024.05.17 |
관심사의 분리, 제어의 역전, 의존관계 주입 (0) | 2024.05.17 |
객체 지향 설계와 스프링 / SOLID 원칙 (0) | 2024.05.17 |
클래스 로더 (0) | 2022.09.28 |