/* μ΄ κΈμ κΉμνλμ κ°μλ₯Ό λ³΄κ³ μ 리νλ €κ³ μμ±ν κΈμ λλ€.
κ°μΈμ μΈ κ³΅λΆλ₯Ό μν΄ μ¬λ¦¬λ κΈμ΄λ―λ‘ μ€κ° μ€κ° μ½λλ μλ΅λμμ΅λλ€. */
μ€νλ§ λΉ μ‘°ν - λμΌν νμ μ΄ λ μ΄μ
ApplicationContextSameBeanFindTest
public class ApplicationContextSameBeanFindTest {
//ν
μ€νΈλ₯Ό μν΄ μ¬μ©ν ν΄λμ€ μμ±
@Configuration
static class SameBeanConfig {
@Bean
public MemberRepository memberRepository1() {
return new MemoryMemberRepository();
}
@Bean
public MemberRepository memberRepository2() {
return new MemoryMemberRepository();
}
}
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SameBeanConfig.class);
@Test
@DisplayName("νμ
μΌλ‘ μ‘°νμ κ°μ νμ
μ΄ λ μ΄μ μμΌλ©΄, μ€λ³΅ μ€λ₯κ° λ°μνλ€.")
void findBeanByTypeDuplicate() {
assertThrows(NoUniqueBeanDefinitionException.class, () -> ac.getBean(MemberRepository.class));
}
@Test
@DisplayName("νμ
μΌλ‘ μ‘°νμ κ°μ νμ
μ΄ λ μ΄μ μμΌλ©΄, λΉ μ΄λ¦μ μ§μ νλ©΄ λλ€.")
void findByName() {
MemberRepository memberRepository = ac.getBean("memberRepository1", MemberRepository.class);
assertThat(memberRepository).isInstanceOf(MemberRepository.class);
}
@Test
@DisplayName("νΉμ νμ
μ λͺ¨λ μ‘°ννκΈ°")
void findAllBeanType() {
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("beansOfType = " + beansOfType);
assertThat(beansOfType.size()).isEqualTo(2);
}
}
βΎ findBeanByTypeDuplicate
β NoUniqueBeanDefinitionException : λμΌν νμ μ λΉμ΄ μ¬λ¬ κ° λ±λ‘ λ κ²½μ° μμΈ λ°μ
β MemberRepository μ νμ λμΌν λΉμ΄ μλ κ²½μ° ν μ€νΈ μ±κ³΅
βΎ findByName
β λμΌν νμ μ λΉμ΄ μ¬λ¬κ°λΌλ©΄ λΉ μ΄λ¦μ μ§μ νμ¬ νΌλμ ν΄κ²°νλ€
βΎ findAllBeanType
β getBeansOfType() : νΉμ νμ (ν΄λμ€ or μΈν°νμ΄μ€)μ ν΄λΉνλ λͺ¨λ λΉμ κ²μνκ³ λ§΅ ννλ‘ λ°ν
β 맡μ ν€λ λΉ μ΄λ¦, κ°μ ν΄λΉ λΉμ μΈμ€ν΄μ€
β keySet() : Mapμ λ©μλ μ€ νλλ‘ Mapμ λͺ¨λ keyλ₯Ό κ°μ Έμ€λ λ° μ¬μ©.
μ€νλ§ λΉ μ‘°ν - μμ κ΄κ³
ApplicationContextExtendsFindTest
public class ApplicationContextExtendsFindTest {
//ν
μ€νΈλ₯Ό μν΄ μ¬μ©ν ν΄λμ€ μμ±
@Configuration
static class TestConfig {
@Bean
public DiscountPolicy rateDiscountPolicy() {
return new RateDiscountPolicy();
}
@Bean
public DiscountPolicy fixDiscountPolicy(){
return new FixDiscountPolicy();
}
}
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class);
@Test
@DisplayName("λΆλͺ¨ νμμΌλ‘ μ‘°νμ, μμμ΄ λ μ΄μ μμΌλ©΄ μ€λ³΅ μ€λ₯κ° λ°μνλ€")
void findBeanByParentTypeDuplicate() {
assertThrows(NoUniqueBeanDefinitionException.class, () -> ac.getBean(DiscountPolicy.class));
}
@Test
@DisplayName("λΆλͺ¨ νμμΌλ‘ μ‘°νμ, μμμ΄ λ μ΄μ μμΌλ©΄ λΉ μ΄λ¦μ μ§μ νλ©΄ λλ€.")
void findBeanByParentTypeBeanName() {
DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy", DiscountPolicy.class);
assertThat(rateDiscountPolicy).isInstanceOf(RateDiscountPolicy.class);
}
@Test
@DisplayName("νΉμ νμ νμ
μΌλ‘ μ‘°ν.")
void findBeanBySubType() {
RateDiscountPolicy bean = ac.getBean(RateDiscountPolicy.class);
assertThat(bean).isInstanceOf(RateDiscountPolicy.class);
}
@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));
}
}
@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));
}
}
}
βΎ λλ¨Έμ§λ μ μκ°μ ν΄λ³Έ κ²λ€.
βΎ findAllBeanByObjectType
β λΆλͺ¨ νμμΌλ‘ μ‘°ννλ©΄ μμ νμ
β μλ° κ°μ²΄μ μ΅κ³ λΆλͺ¨μΈ Object νμ μΌλ‘ μ‘°ννλ©΄ λͺ¨λ μ€νλ§ λΉμ μ‘°ννλ€.
β ν μ€νΈλ₯Ό μ€ννλ©΄ TestConfig.classμ λΉ λΏλ§ μλλΌ μ€νλ§μμ λ΄λΆμ μΌλ‘ μ°λ λΉκΉμ§ λ€ μΆλ ₯λλ€.