일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- C로 시작하는 컴퓨터 프로그래밍4판
- 건담베이스
- 일본어
- Python
- java
- 자바
- Flutter
- 건담
- 日本語
- ruby
- jsp
- メソッド
- 연습문제
- rails
- CSS
- nico
- 一日一つメソッド
- Web
- 인프런
- 비즈니스일본어
- javascript
- DART
- springboot
- 디지몬
- 반다이몰
- vscode
- Spring
- rails7
- html
- 単語
- Today
- Total
AR삽질러
Spring Been 조회 - 상속관계(9) 본문
Spring Container에서 Been을 조회하는 테스트 클래스
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class);
- AnnotationConfigApplicaionContext 객체를 생성하고 TestConfig클래스를 파라미터로 전달하여 컨테이너를 초기화한다. (빈을 등록시키는 과정)
@Configuration
- 내부 클래스인 TestConfig 클래스에서 사용되는 어노테이션으로 @Bean어노테이션으로 rateDiscountPolicy(), fixDiscountPolicy()메서드는 해당 타입의 빈을 생성하고 반환한다.
부모타입으로 조회시 자식이 둘이상 있으면 중복 오류가 발생한다.
public class ApplicationContextExtendsFindTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class);
@Configuration
static class TestConfig{
@Bean
public DiscountPolicy rateDiscountPolicy(){
return new RateDiscountPolicy();
}
@Bean
public DiscountPolicy fixDiscountPolicy(){
return new FixDiscountPolicy();
}
}
@Test
@DisplayName("부모 타입으로 조회, 자식이 둘이상 있으면 중복 오류발생")
void findBeanByParentTypeDuplicate(){
DiscountPolicy bean = ac.getBean(DiscountPolicy.class);
assertThrows(NoUniqueBeanDefinitionException.class, ()-> ac.getBean(DiscountPolicy.class));
}
findBeanByParentTypeDuplicate : 부모 타입으로 조회했을 때 같은 타입의 자식 빈이 여러 개 있다면 중복오류를 발생시키는지에 대한 테스트로 ac.getBean(DiscountPolicy.class)를 호출하여 부모 타입의 DiscountPolicy빈을 가져와 NoUniqueBeanDefinitionException이 발생해야 테스트에서 통과된다.
부모타입으로 조회했을때 같은 타입의 빈(자식)이 여러개 있으면 빈이름을 지정하여 조회할 수 있는지 테스트
@Test
@DisplayName("부모 타입으로 조회, 자식이 둘이상 있으면 빈이름을 지정하면 된다.")
void findBeanByParentTypeBeanName(){
DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy", DiscountPolicy.class);
assertThat(rateDiscountPolicy).isInstanceOf(RateDiscountPolicy.class);
}
ac.getBean(DiscountPolicy.class)를 호출했을 때 NoUniqueBeanDefinitionException이 발생하는지 테스트
특정하위타입으로 조회하는 테스트
@Test
@DisplayName("특정 하위 타입으로 조회")
void findBeanBySubType(){
RateDiscountPolicy bean = ac.getBean(RateDiscountPolicy.class);
assertThat(bean).isInstanceOf(RateDiscountPolicy.class);
}
ac.getBean(RateDiscountPolicy.class)를 호출하여 RateDiscountPolicy타입의 빈을 가져와 조회하는 테스트
부모타입으로 모든 빈을 조회하는 테스트
@Test
@DisplayName("부모타입으로 모두 조회하기")
void findAllBeanByParentType(){
Map<String, DiscountPolicy> beansOfType = ac.getBeansOfType(DiscountPolicy.class);
assertThat(beansOfType.size()).isEqualTo(2);
for(String key : beansOfType.keySet()){
System.out.println("key = " + key + " value = " + beansOfType.get(key));
}
}
ac.getBeanOfType(DiscountPolicy.class)를 호출하여 부모 타입인 DiscountPolicy의 모든 빈을 가져와 Map<String, DiscountPolicy>형태로 키 = 이름, 값 = 빈의 인스턴스로 반환한다.
beanOfType.size()가 2와 일치하는지 확인한후 Map의 키와 값을 출력한다.
**Map : Java컬렉션으로 key-value 형태의 쌍으로 데이터를 저장하는 자료구조. 키를 통해 값을 검색할 수 있다.
Object타입으로 모든 빈을 조회하는 테스트
@Test
@DisplayName("부모타입으로 모두 조회하기 - Object")
void findAllBeanObjectType(){
Map<String, Object> beansOfType = ac.getBeansOfType(Object.class);
for(String key : beansOfType.keySet()){
System.out.println("key = " + key + " value = " + beansOfType.get(key));
}
}
Object타입으로 모든 빈을 조회하는 테스트로 ac.getBeansOfType(Object.class)를 호출하여 모든 빈을 가져온다. 반환되는 값은 Map<String, Object>로 key = 빈의 이름 value = 빈의 인스턴스로 반환된다. Object타입은 모든 자바객체의 상위 클래스에 해당하기 때문에 모든 Been을 조회하는것이 가능하다.
'JAVA > Spring' 카테고리의 다른 글
Spring Singleton, SingletionContainer (11) (0) | 2023.08.05 |
---|---|
Spring BeenFactory와 ApplicationContext(10) (0) | 2023.08.04 |
Spring springBeen조회(8) (0) | 2023.07.16 |
Spring springBeen과 springContainer(7) (0) | 2023.07.15 |
Spring-기본예제-> Spring(6) (0) | 2023.07.03 |