스프링 컨테이너
ApplicationContext를 스프링 컨테이너라고 한다.
스프링 컨테이너는 XML , 자바 설정 클래스로 만들 수 있다.
스프링 컨테이너에 등록된 개체를 스프링 빈이라 한다.
스프링 컨테이너에 빈을 등록할때는 @Bean 을 써서 등록한다.
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
스프링 빈은 getBean() 메소드를 사용해서 찾을 수 있다.
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = ac.getBean("memberService",MemberService.class);
스프링 빈을 출력할때
BeanDefinition.getRole() 로 스프링 내부에서 사용하는 빈 , 내가 등록한 빈을 구분 할 수 있다.
BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
일반적으로 사용자가 정의한 빈
BeanDefinition.ROLE_APPLICATION
스프링이 내부에서 사용하는 빈
BeanDefinition.ROLE_INFRASTRUCTURE
스프링 빈 조회 방법
MemberService memberService = ac.getBean("memberService",MemberService.class);
테스트코드 작성 시에 Exception 검사
assertThrows(NoSuchBeanDefinitionException.class,
() -> ac.getBean("xxxx",MemberService.class));
자바8의 람다를 이용한다.
스프링 빈을 조회할 때 타입으로 조회시 같은 타입이 둘 이상 있으면 에러가 난다.
그럴때에는 빈 이름을 지정하면 된다.
MemberService memberService = ac.getBean("memberService", MemberServiceImpl.class);
BeanFactory
스프링 컨테이너의 최상위 인터페이스다.
getBean()을 제공한다.
스프링 빈 설정 메타 정보 - BeanDefinition
스프링 빈 설정 메타정보라 한다.
XML을 읽어서 BeanDefinition 을 만든다.
자바 코드를 읽어서 BeanDefinition 을 만든다.
'SPRING' 카테고리의 다른 글
김영한 SPRING 기본편 6일차 (0) | 2021.12.13 |
---|---|
김영한 SPRING 기본편 5일차 (0) | 2021.12.13 |
김영한 SPRING 기본편 4일차 (0) | 2021.12.10 |
김영한 SPRING 기본편 3일차 (0) | 2021.12.09 |
김영한 SPRING 기본편 1일차 (0) | 2021.12.08 |