일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- メソッド
- javascript
- nico
- Web
- html
- 인프런
- C로 시작하는 컴퓨터 프로그래밍4판
- DART
- rails7
- Spring
- 비즈니스일본어
- CSS
- Flutter
- 연습문제
- rails
- Python
- springboot
- 単語
- 자바
- 一日一つメソッド
- 日本語
- vscode
- 일본어
- 건담
- ruby
- jsp
- java
- 건담베이스
- 디지몬
- 반다이몰
- Today
- Total
AR삽질러
Spring springBeen조회(8) 본문
빈 이름으로만 조회
public class ApplicationContextBasicFindTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("빈 이름으로 조회")
void findBeanByName(){
MemberService memberService = ac.getBean("memberService", MemberService.class);
Assertions.assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
memberService 빈을 MemberService타입으로 조회해 MemberServiceImpl 클래스인지 조회한다.
빈 타입으로 조회
public class ApplicationContextBasicFindTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
@Test
@DisplayName("빈 이름으로 조회")
void findBeanByName(){
MemberService memberService = ac.getBean("memberService", MemberService.class);
Assertions.assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
memberService 빈을 조회해 MemberServiceImple 클래스인스턴스인지 조회한다.
빈 이름으로 조회 예외
@Test
@DisplayName("구체타입으로 조회")
void findBeanByName2(){
MemberService memberService = ac.getBean("memberService", MemberServiceImpl.class);
Assertions.assertThat(memberService).isInstanceOf(MemberServiceImpl.class);
}
MemberService 빈을 MemberServiceImpl 클래스로 조회해 빈이 MemberServiceImpl클래스인스턴스인지 조회한다.
빈 이름으로 조회 예외2
@Test
@DisplayName("빈 이름으로 조회 예외")
void findBeanByNameError(){
assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("Error", MemberService.class));
}
존재하지 않는 빈의 이름으로 조회할시 예외가 발생하는지 확인하는 테스트로 Error라는 이름의 테스트빈을 가정해 MemberService타입으로 조회한결과 NoSuchBeanDefinitionException 예외가 발생하는지 확인해본다.
- AnnotationConfigApplicationContext : 스프링 어노테이션 기반 설정으로 애플리케이션 컨텍스르를 생성하는 클래스
- @Test : JUnit 테스트 메서드를 지정하는 어노테이션
- @DisplayName : 테스트 메서드의 이름을 지정하는 어노테이션
- @Bean : 스프링컨테이너에 빈을 등록하는 메서드를 지정하는 어노테이션
동일한 타입이 두개 이상일 경우
public class ApplicationContextSameBeanFindTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class);
@Test
@DisplayName("타입으로 조회시 같은 타입이 둘 이상이면 중복 오류가 발생한다.")
void findBeanByTypeDuplicate(){
assertThrows(NoUniqueBeanDefinitionException.class, () -> ac.getBean(MemberRepository.class));
}
동일한 타입의 빈이 두개 이상 등록되어 있을때 타입으로 빈을 조회하면 중복오류가 발생하는데 확인하는 테스트로 MemberRepository 타입으로 빈을 조회하였을때 NoUiqueBeanDefinitionException예외가 발생하는지 테스트한다.
assertThrowa() : 특정 예외가 발생하는지 검증하는 메서드로 첫번째 변수로 예상한 클래스를 전달하고 두번쨰 변수에 람다식으로 전달한다. 여기서는 NoUniqueBeanDefinitionException이 발생하는지를 검증한다.
타입으로 조회시 같은 타입이 둘 이상이면 빈 이름을 지정한다.
@Test
@DisplayName("타입으로 조회시 같은 타입이 둘 이상이면 빈 이름을 지정한다.")
void findBeanByName(){
MemberRepository memberRepository = ac.getBean("memberRepository1", MemberRepository.class);
assertThat(memberRepository).isInstanceOf(MemberRepository.class);
}
동일한 타입의 빈이 두개 이상 등록되었을때 빈이름을 지정하여 조회하는 테스트로 해당 빈이 memberRepository1 로 MemberRepository 타입의 빈을 조회하여 MemberRepository 클래스의 인스턴스인지 검증한다.
특정타입을 모두 조회하기
@Test
@DisplayName("특정 타입을 모두 조회하기")
void findAllBeanByType(){
Map<String, MemberRepository> beansOfType = ac.getBeansOfType(MemberRepository.class);
for(String key : beansOfType.keySet()){
System.out.println("key = " + key + " value = " + beansOfType.get(key));
}
System.out.println("beanOfType = " + beansOfType);
assertThat(beansOfType.size()).isEqualTo(2);
}
해당 타입의 모든 빈을 조회하는 방법으로 MemberRepository타입의 모든 빈을 조회해서 조회된 빈들을 출력하고 마지막으로 빈의 갯수가 2개인지 검증한다.
'JAVA > Spring' 카테고리의 다른 글
Spring BeenFactory와 ApplicationContext(10) (0) | 2023.08.04 |
---|---|
Spring Been 조회 - 상속관계(9) (0) | 2023.07.16 |
Spring springBeen과 springContainer(7) (0) | 2023.07.15 |
Spring-기본예제-> Spring(6) (0) | 2023.07.03 |
Spring-등급제회원_기본예제DIP, OCP(5) (0) | 2023.06.28 |