๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/Spring

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์Šคํ”„๋ง ๋นˆ - ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋นˆ ์กฐํšŒ, ์Šคํ”„๋ง ๊ธฐ๋ณธ ๋นˆ ์กฐํšŒ)

by YeonBu 2023. 10. 25.
728x90

/* ์ด ๊ธ€์€ ๊น€์˜ํ•œ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๋ณด๊ณ  ์ •๋ฆฌํ•˜๋ ค๊ณ  ์ž‘์„ฑํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค.

   ๊ฐœ์ธ์ ์ธ ๊ณต๋ถ€๋ฅผ ์œ„ํ•ด ์˜ฌ๋ฆฌ๋Š” ๊ธ€์ด๋ฏ€๋กœ ์ค‘๊ฐ„ ์ค‘๊ฐ„ ์ฝ”๋“œ๋Š” ์ƒ๋žต๋˜์—ˆ์Šต๋‹ˆ๋‹ค. */

 

 

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

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

www.inflearn.com

 

 

 

์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋นˆ ์กฐํšŒ

 

 

ApplicationContextInfoTest

 

public class ApplicationContextInfoTest {

    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

    @Test
    @DisplayName("๋ชจ๋“  ๋นˆ ์ถœ๋ ฅํ•˜๊ธฐ")
    void findAllBean(){
    
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        
        for (String beanDefinitionName : beanDefinitionNames) {
            Object bean = ac.getBean(beanDefinitionName);
            System.out.println("name = " + beanDefinitionName + " object = " + bean);
        }
        
    }

    @Test
    @DisplayName("์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นˆ ์ถœ๋ ฅํ•˜๊ธฐ")
    void findApplicationBean(){
    
        String[] beanDefinitionNames = ac.getBeanDefinitionNames();
        
        for (String beanDefinitionName : beanDefinitionNames) {
            BeanDefinition beanDefinition = ac.getBeanDefinition(beanDefinitionName);
            
            if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION){
                Object bean = ac.getBean(beanDefinitionName);
                System.out.println("name = " + beanDefinitionName + " object = " + bean);
            }
        }
        
    }

}

 

โ—พ ๋ชจ๋“  ๋นˆ ์ถœ๋ ฅํ•˜๊ธฐ

โœ”  ์‹คํ–‰ํ•˜๋ฉด ์Šคํ”„๋ง์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋นˆ ์ •๋ณด๋ฅผ ์ถœ๋ ฅ ํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ”  getBeanDefinitionNames() : ์Šคํ”„๋ง์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ๋นˆ ์ด๋ฆ„์„ ์กฐํšŒํ•œ๋‹ค.

โœ”  getBean() : ๋นˆ ์ด๋ฆ„์œผ๋กœ ๋นˆ ๊ฐ์ฒด(์ธ์Šคํ„ด์Šค)๋ฅผ ์กฐํšŒํ•œ๋‹ค.

โœ”  ์ด๋ ‡๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์Šคํ”„๋ง ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋นˆ๊นŒ์ง€ ์ „์ฒด ์ถœ๋ ฅ๋œ๋‹ค.

 

 

โ—พ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋นˆ ์ถœ๋ ฅํ•˜๊ธฐ

โœ”  ์Šคํ”„๋ง์ด ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋นˆ์€ ์ œ์™ธํ•˜๊ณ  ๋‚ด๊ฐ€ ๋“ฑ๋กํ•œ ๋นˆ๋งŒ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ

โœ”  ์Šคํ”„๋ง์ด ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋นˆ์€ getRole()๋กœ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

(ROLE_APPLICATION : ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ๋นˆ/ROLE_INFRASTRUCTURE : ์Šคํ”„๋ง์ด ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋นˆ)

ROLE_APPLICATION

 

ROLE_INFRASTRUCTURE

 

 

 

์Šคํ”„๋ง ๋นˆ ์กฐํšŒ - ๊ธฐ๋ณธ

 

 

ApplicationContextBasicFindTest

 

public class ApplicationContextBasicFindTest {

    AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);

    @Test
    @DisplayName("๋นˆ ์ด๋ฆ„์œผ๋กœ ์กฐํšŒ")
    void findBeanByName(){

        MemberService memberService = ac.getBean("memberService", MemberService.class);
        assertThat(memberService).isInstanceOf(MemberServiceImpl.class);

    }

    @Test
    @DisplayName("์ด๋ฆ„ ์—†์ด ํƒ€์ž…์œผ๋กœ ์กฐํšŒ")
    void findBeanByType(){

        MemberService memberService = ac.getBean(MemberService.class);
        assertThat(memberService).isInstanceOf(MemberServiceImpl.class);

    }

    @Test
    @DisplayName("๊ตฌ์ฒด ํƒ€์ž…์œผ๋กœ ์กฐํšŒ")
    void findBeanByName2(){

        MemberServiceImpl memberService = ac.getBean("memberService", MemberServiceImpl.class);
        assertThat(memberService).isInstanceOf(MemberServiceImpl.class);

    }

    @Test
    @DisplayName("๋นˆ ์ด๋ฆ„์œผ๋กœ ์กฐํšŒ ์‹คํŒจ")
    void findBeanByNameX(){

        //MemberServiceImpl xxxxx = ac.getBean("xxxxx", MemberServiceImpl.class);
        assertThrows(NoSuchBeanDefinitionException.class, () -> ac.getBean("xxxxx", MemberServiceImpl.class));

    }

}

 

โ—พ ๋นˆ ์ด๋ฆ„์œผ๋กœ ์กฐํšŒ

โœ” isInstanceOf() : ๊ฐ์ฒด๊ฐ€ ํŠน์ • ํด๋ž˜์Šค๋‚˜ ํƒ€์ž…์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€ ํ™•์ธํ•˜๋Š” ๋ฉ”์„œ๋“œ.

โœ”  ๋นˆ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ MemberSerive ๋นˆ์„ ์กฐํšŒํ•˜๊ณ  ํ•ด๋‹น ๋นˆ์ด MemberServiceImple ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€ ํ™•์ธ.

 

 

โ—พ ์ด๋ฆ„์—†์ด ํƒ€์ž…์œผ๋กœ ์กฐํšŒ

โœ”  ๋นˆ ์ด๋ฆ„ ์—†์ด ํƒ€์ž…๋งŒ ์‚ฌ์šฉํ•˜์—ฌ MemberSerive ๋นˆ์„ ์กฐํšŒํ•˜๊ณ  ํ•ด๋‹น ๋นˆ์ด MemberServiceImple ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€ ํ™•์ธ.

โœ”  ๊ฐ™์€ ํƒ€์ž…์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ `NoUniqueBeanDefinitionException`์ด ๋ฐœ์ƒํ•จ. 

 

 

โ—พ ๊ตฌ์ฒด ํƒ€์ž…์œผ๋กœ ์กฐํšŒ

โœ”  ๋นˆ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ `MemberServiceImpl` ๋นˆ์„ ์กฐํšŒํ•˜๊ณ  ํ•ด๋‹น ๋นˆ์ด MemberServiceImple ํด๋ž˜์Šค์˜ ์ธ์Šคํ„ด์Šค์ธ์ง€ ํ™•์ธ.

โœ”  ์ด ๊ฒฝ์šฐ ๋นˆ์˜ ๊ตฌ์ฒดํƒ€์ž…์œผ๋กœ ์กฐํšŒ๊ฐ€ ๋จ(์ด๋ ‡๊ฒŒ ์กฐํšŒํ•˜๋ฉด ๋ณ€๊ฒฝ์‹œ ์œ ์—ฐ์„ฑ์ด ๋–จ์–ด์ง)

 

 

โ—พ ๋นˆ ์ด๋ฆ„์œผ๋กœ ์กฐํšŒ ์‹คํŒจ

โœ”  ์ฃผ์„์„ ์ œ์™ธํ•˜๊ณ  ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ `NoSuchBeanDefinitionException` ์—๋Ÿฌ ๋ฐœ์ƒ. ์ด ์—๋Ÿฌ๋Š” ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๋นˆ์„ ์กฐํšŒํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ.

โœ”  assertThrows : ์–˜๋Š” JUnit์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์„œ๋“œ์ž„. ํŠน์ • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ…Œ์ŠคํŠธ์— ํ†ต๊ณผํ•˜๊ณ  ๋ฐœ์ƒํ•˜์ง€ ์•Š์œผ๋ฉด ์‹คํŒจ.

โœ”  NoSuchBeanDefinitionException.class : ๊ฒ€์ฆํ•˜๋ ค๋Š” ์˜ˆ์™ธ ํด๋ž˜์Šค ์ง€์ •. ์ด ํด๋ž˜์Šค์˜ ๊ฒฝ์šฐ ์Šคํ”„๋ง์—์„œ ๋นˆ์„ ์ฐพ์„ ์ˆ˜ ์—†์„ ๋•Œ ๋ฐœ์ƒ

โœ”  () -> ac.getBean("xxxxx", MemberServiceImpl.class) : ๊ฒ€์ฆํ•˜๋ ค๋Š” ์ฝ”๋“œ ๋ธ”๋ก์„ ์ง€์ •. ac์— "xxxxx"๋ผ๋Š” ์ด๋ฆ„์˜ ๋นˆ์„ MemberServiceImpl ํด๋ž˜์Šค์˜ ํƒ€์ž…์œผ๋กœ ์กฐํšŒ.

โœ”  ๊ฒฐ๊ณผ์ ์œผ๋กœ "xxxxx" ๋ผ๋Š” ์ด๋ฆ„์˜ ๋นˆ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ…Œ์ŠคํŠธ ์„ฑ๊ณต!

 

 

 

๋ฐ˜์‘ํ˜•

'IT > Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์Šคํ”„๋ง ๋นˆ - BeanFactory์™€ ApplicationContext)  (0) 2023.10.28
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์Šคํ”„๋ง ๋นˆ - ์Šคํ”„๋ง ๋นˆ ์กฐํšŒ ์‹œ ๋™์ผํ•œ ํƒ€์ž…์ด ๋‘˜ ์ด์ƒ, ์ƒ์† ๊ด€๊ณ„)  (1) 2023.10.28
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ์Šคํ”„๋ง ๋นˆ - ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ)  (0) 2023.10.25
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ์ ์šฉ - ์Šคํ”„๋ง์œผ๋กœ ์ „ํ™˜ํ•˜๊ธฐ)  (0) 2023.10.25
[์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ] ์ธํ”„๋Ÿฐ ๊ฐ•์˜ ์ •๋ฆฌ(๊ฐ์ฒด ์ง€ํ–ฅ ์›๋ฆฌ ์ ์šฉ - IoC, DI, ๊ทธ๋ฆฌ๊ณ  ์ปจํ…Œ์ด๋„ˆ)  (1) 2023.10.22