Spring/Spring ๊ธฐ๋ณธ

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] - 12. ์Šคํ”„๋ง ๋นˆ ์กฐํšŒ - ์ƒ์† ๊ด€๊ณ„

hello_u 2023. 2. 4. 15:07

 

์Šคํ”„๋ง ๋นˆ ์กฐํšŒ - ์ƒ์† ๊ด€๊ณ„

 

 

๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•˜๋ฉด, ์ž์‹ ํƒ€์ž…๋„ ํ•จ๊ป˜ ์กฐํšŒํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ๋ชจ๋“  ์ž๋ฐ” ๊ฐ์ฒด์˜ ์ตœ๊ณ  ๋ถ€๋ชจ์ธ Object ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•˜๋ฉด, ๋ชจ๋“  ์Šคํ”„๋ง ๋นˆ์„ ์กฐํšŒํ•œ๋‹ค.

 

 

 

 

์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ 

 

AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class);

 

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” @Configuration ์ด ๋ถ™์€ TestConfig ๋ฅผ ์„ค์ •(๊ตฌ์„ฑ) ์ •๋ณด๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

TestConfig.class

@Configuration
static class TestConfig {

    @Bean
    public DiscountPolicy rateDiscountPolicy() {
        return new RateDiscountPolicy();
    }

    @Bean
    public DiscountPolicy fixDiscountPolicy() {
        return new FixDiscountPolicy();
    }
}

 

DiscountPolicy  ํƒ€์ž…์ด ์ค‘๋ณต๋˜์—ˆ๋‹ค 

 

@Test
@DisplayName("๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ์กฐํšŒ์‹œ , ์ž์‹์ด ๋‘˜ ์ด์ƒ ์žˆ์œผ๋ฉด , ์ค‘๋ณต ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค")
void findBeanByParentTypeDuplicate() {
    DiscountPolicy bean = ac.getBean(DiscountPolicy.class);
}

 

DiscountPolicy ํƒ€์ž…์œผ๋กœ ์กฐํšŒ์‹œ NoUniqueBeanDefinitionException ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค 

 

 

NoUniqueBeanDefinitionException ์—๋Ÿฌ ๋ฐœ์ƒ

 

 

@Test
@DisplayName("๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ์กฐํšŒ์‹œ , ์ž์‹์ด ๋‘˜ ์ด์ƒ ์žˆ์œผ๋ฉด , ์ค‘๋ณต ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค")
void findBeanByParentTypeDuplicate() {
    Assertions.assertThrows(NoUniqueBeanDefinitionException.class,
            () -> ac.getBean(DiscountPolicy.class));
}

 

์˜ˆ์™ธ ์ฒ˜๋ฆฌ 

assertThrows : ์ด ์˜ˆ์™ธ๊ฐ€ ํ„ฐ์ ธ์•ผ ์„ฑ๊ณต 

() -> ์ด ๋กœ์ง์„ ์‹คํ–‰ ํ–ˆ์„ ๋•Œ

 

 

@Test
@DisplayName("๋ถ€๋ชจ ํƒ€์ž…์œผ๋กœ ์กฐํšŒ ์‹œ , ์ž์‹์ด ๋‘˜ ์ด์ƒ ์žˆ์œผ๋ฉด , ๋นˆ ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋ฉด ๋œ๋‹ค")
void findBeanByParentTypeBeanName() {
    DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy", DiscountPolicy.class);
    assertThat(rateDiscountPolicy).isInstanceOf(DiscountPolicy.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));
    }
}

 

ac.getBeansOfType() ์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•ด๋‹น ํƒ€์ž…์˜ ๋ชจ๋“  ๋นˆ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

key : ๋นˆ ์ด๋ฆ„ / value : ๋นˆ ๊ฐ์ฒด

 

entrySet() ๋ฉ”์„œ๋“œ๋Š” key์™€ value์˜ ๊ฐ’์ด ๋ชจ๋‘ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•˜๊ณ , 

keySet() ๋ฉ”์„œ๋“œ๋Š” key์˜ ๊ฐ’๋งŒ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

 

 

beansOfType.get(key) : key๊ฐ’์„ ์–ป๋Š”๊ฒŒ ์•„๋‹Œ beansOfType์—์„œ key๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” value๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ

 

 

key , value ์ถœ๋ ฅ

 

 

 

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));
    }
}

 

Object ํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•˜๋ฉด, ๋ชจ๋“  ์Šคํ”„๋ง ๋นˆ์„ ์กฐํšŒํ•œ๋‹ค.

 

์ž๋ฐ” ๊ฐ์ฒด๋Š” ๋ชจ๋“ ๊ฒŒ Object ํƒ€์ž…์ด๋‹ค 

 

Spring ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด๊นŒ์ง€ ๋ชจ๋‘ ์กฐํšŒํ•œ๋‹ค

 

 

 

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ - ์ธํ”„๋Ÿฐ | ๊ฐ•์˜

์Šคํ”„๋ง ์ž…๋ฌธ์ž๊ฐ€ ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด๊ฐ€๋ฉด์„œ ์Šคํ”„๋ง์˜ ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์Šคํ”„๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ™•์‹คํžˆ ๋‹ค์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค., - ๊ฐ•์˜ ์†Œ๊ฐœ | ์ธํ”„๋Ÿฐ...

www.inflearn.com