티스토리 뷰
반응형
import java.util.Map;
public class ApplicationContextExtendsFindTest {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ConfigTest.class);
@Test
@DisplayName("부모타입으로 조회 시,자식이 둘 이상 있으면 중복오류가 발생한다.")
void findBeanType() {
Assertions.assertThrows(NoUniqueBeanDefinitionException.class, () -> ac.getBean(DiscountPolicy.class));
}
@Test
@DisplayName("둘 이상의 자식이 있는 경우, 빈 이름을 지정하면 된다.")
void findBeanParentTypeBeanName() {
DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy", DiscountPolicy.class);
org.assertj.core.api.Assertions.assertThat(rateDiscountPolicy).isInstanceOf(DiscountPolicy.class);
}
@Test
@DisplayName("둘 이상의 자식이 있는 경우, 빈 클래스를 직접 지정하면 된다.")
void findBeanParentSubType() {
DiscountPolicy fixDiscountPolicy = ac.getBean(FixDiscountPolicy.class);
org.assertj.core.api.Assertions.assertThat(fixDiscountPolicy).isInstanceOf(FixDiscountPolicy.class);
}
@Test
@DisplayName("부모를 상속받은 모든 자식들을 조회한다.")
void findAllBeanParentType(){
Map<String, DiscountPolicy> beansOfType = ac.getBeansOfType(DiscountPolicy.class);
for (String key : beansOfType.keySet()) {
System.out.println("key = " + key + " value=>" + beansOfType.get(key));
}
}
// 모든 객체는 Ojbect를 최상위 보모로 갖고있기 때문에
// Object로 조회 시
// @Configuration으로 설정한 @Bean객체들 뿐만아니라
// 스프링에서 자동으로 설정해준 객체들까지 모두 나온다
@Test
@DisplayName("부모를 상속받은 모든 자식들을 조회한다.")
void findAllBeanObject(){
Map<String, Object> beansOfType = ac.getBeansOfType(Object.class);
for (String key : beansOfType.keySet()) {
System.out.println("key = " + key + " value=>" + beansOfType.get(key));
}
}
@Configuration
static class ConfigTest{
@Bean
public DiscountPolicy fixDiscountPolicy() {
return new FixDiscountPolicy();
}
@Bean
public DiscountPolicy rateDiscountPolicy() {
return new RateDiscountPolicy();
}
}
}
반응형
'스프링의 핵심원리 > 기본편' 카테고리의 다른 글
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
- elasticsearch
- Intellij
- install
- NPM
- 스트림
- ngnix
- docker
- mvn
- map
- webpack
- stream
- 람다
- 최종연산
- BeanFactory
- java
- container
- Vuex
- JPA
- AnnotationConfigApplicationContext
- vscode
- 중간연산
- lambda
- nginx
- 차이
- MAC
- 자바8
- ApplicationContext
- 영속성 컨텍스트
- springboot
- Vue
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함