Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 알고리즘
- JDBC
- 자바
- 인프런
- Servlet
- Android
- SpringBoot
- java
- jpa
- Thymeleaf
- AOP
- kotlin
- 김영한
- Greedy
- Exception
- 그리디
- db
- 스프링 핵심 기능
- 스프링 핵심 원리
- spring
- pointcut
- http
- 백준
- JPQL
- springdatajpa
- transaction
- Proxy
- QueryDSL
- Spring Boot
- 스프링
Archives
- Today
- Total
개발자되기 프로젝트
스프링 빈 조회 - 상속관계 본문
- 원칙 : 부모 타입으로 조회하면, 자식 타입은 줄줄이 끌려나옴.
- 그러면 Object로 조회하면 전부 다 조회하겠네?
1. TestConfig class생성
- 해당 테스트에서 사용할 Configuration class
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();
}
}
}
2. 부모 타입으로 조회
- 자식이 둘 이상이면
- NoUniqueBeanDefinitionException 예외 발생
- 진짜?
@Test
@DisplayName("부모 타입으로 조회시 , 자식이 둘 이상 있으면 중복 오류가 발생")
void findBeanByParentTypeDuplicate(){
//DiscountPolicy bean = ac.getBean(DiscountPolicy.class);
assertThrows(NoUniqueBeanDefinitionException.class, () -> ac.getBean(DiscountPolicy.class));
}
3. 부모타입으로 조회
- 예외가 안터질라면?
- 이름을 지정하면됨!
@Test
@DisplayName("부모 타입으로 조회시 , 자식이 둘 이상 있으면, 빈 이름을 지정")
void findBeanByParentTypeBeanName(){
DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy",DiscountPolicy.class);
assertThat(rateDiscountPolicy).isInstanceOf(RateDiscountPolicy.class);
}
4. 특정 하위 타입으로 조회( 구체 클래스 조회)
- 구체 클래스도 조회가 가능해
- 좋은 방법은 아니야. 역할에 의존해야함.
- 가끔 필요할 경우는 있음.
@Test
@DisplayName("특정 하위타입으로 조회 = 구체 클래스 조회")
void findBeanBySubType(){
DiscountPolicy rateDiscountPolicy = ac.getBean(RateDiscountPolicy.class);
assertThat(rateDiscountPolicy).isInstanceOf(RateDiscountPolicy.class);
}
5. 부모 타입으로 모두 조회
- ac.getBeansOfType(type) 사용
- 자식 클래스까지 다꺼내옴
@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));
}
}
key = rateDiscountPolicy value = hello.core.discount.RateDiscountPolicy@1ae67cad
key = fixDiscountPolicy value = hello.core.discount.FixDiscountPolicy@2f6e28bc
6. Object로 조회하면?
- 모든 스프링 빈 다끌려옴
@Test
@DisplayName("Object로 해보자 ㅋㅋ")
void findAllBeanByObjectType(){
Map<String, Object> beansOfType = ac.getBeansOfType(Object.class);
for (String key : beansOfType.keySet()) {
System.out.println("key = " + key + " value = " + beansOfType.get(key));
}
}
7. GitHub : 210726 Find Bean
'인프런 > [인프런] Spring 핵심원리 이해' 카테고리의 다른 글
XML로 설정해보자아 (0) | 2021.07.26 |
---|---|
BeanFactory와 ApplicationContext (0) | 2021.07.26 |
스프링 빈 조회 - 같은 타입의 빈이 여러 개면? (0) | 2021.07.26 |
스프링 빈 조회 - 기본 (0) | 2021.07.26 |
컨테이너에 등록된 빈 조회 (0) | 2021.07.26 |
Comments