티스토리 뷰
반응형
@Configurable 어노테이션을 통해 스프링 컨텍스트에 빈을 등록한 후
확인하는 방법을 테스트 코드로 작성해보겠다.
@Configurable
public class AppConfig {
@Bean
public MemberService memberService(){
return new MemberServiceImpl(getMemberRepository());
}
@Bean
private MemberRepository getMemberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService(){
return new OrderServiceImpl(getMemberRepository(), getDiscountPolicy());
}
@Bean
private DiscountPolicy getDiscountPolicy() {
return new RateDiscountPolicy();
}
}
@Configurable 어노테이션을 통해 @Bean객체를 등록할 설정 파일임을 정의한다
@Bean을 통해 빈에 등록할 java파일을 정의한다
자, 그럼 테스트 코드를 작성해보자,
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("빈 이름으로 조회")
void findBeanByName() {
MemberService memberService = ac.getBean(MemberService.class);
// MemberService memberService = ac.getBean("memberService", MemberService.class);
// Class명 조회
System.out.println("memberService = " + memberService);
System.out.println("memberService.getClass() = " + memberService.getClass());
// 인스턴스로 비교
Assertions.assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
AnnotationConfigApplicationContext을 통해
AppConfig.class에 등록된 @Bean객체들을 스프링 컨테이너에 올려놓는다.
ac.getBean을 통해 Bean객체를 얻어 올 수 이있다.
Assertions.assertThat을 통해 테스트를 적는다
isInstanceOf로 해당 인스턴스의 타입을 확인하다.
@Test
@DisplayName("빈 이름으로 조회X")
void findBeanByNameX(){
//NoSuchBeanDefinitionException
//MemberService xxxx = ac.getBean("XXXX", MemberService.class);
org.junit.jupiter.api.Assertions.assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("XXXX", MemberService.class));
}
MemberService xxxx = ac.getBean("XXXX", MemberService.class);
없는 스프링 빈을 꺼내려고 하면 NoSuchBeanDefinitionException오류가 발생한다.
org.junit.jupiter.api.Assertions.assertThrows을 통해 Exception을 확인해본다.
Keyword
- new AnnotationConfigApplicationContext(AppConfig.class);
- ac.getBean("XXXX", MemberService.class);
- NoSuchBeanDefinitionException
- Assertions.assertThat(memberService).isInstanceOf(MemberServiceImpl.class)
- org.junit.jupiter.api.Assertions.assertThrows
반응형
'스프링의 핵심원리 > 기본편' 카테고리의 다른 글
Validation 정리중 (0) | 2022.04.16 |
---|---|
스프링컨테이너 설정 어노테이션과 XML 비교 (0) | 2022.02.26 |
BeanFactory와 ApplicationContext (0) | 2022.02.26 |
스프링 빈 등록 테스트코드로 확인하기 (0) | 2022.02.26 |
SOLID 5가지 원칙 (0) | 2022.02.18 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- install
- 영속성 컨텍스트
- lambda
- vscode
- ngnix
- BeanFactory
- mvn
- NPM
- Intellij
- 차이
- ApplicationContext
- 자바8
- elasticsearch
- AnnotationConfigApplicationContext
- container
- 스트림
- webpack
- stream
- nginx
- springboot
- 람다
- JPA
- Vue
- MAC
- 중간연산
- Vuex
- map
- java
- 최종연산
- docker
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함