인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

hi_man159님의 프로필 이미지
hi_man159

작성한 질문수

스프링 핵심 원리 - 기본편

조회한 빈이 모두 필요할 때, List, Map

싱글톤

작성

·

283

0

package hello.core.autowired;

public class AllBeanTest {

    @Test
    void findAllBean(){
        ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class,DiscountService.class);

여기서요,

 

package hello.core;

@ComponentScan(
        excludeFilters = @ComponentScan.Filter(type= FilterType.ANNOTATION, classes =Configuration.class)
)
public class AutoAppConfig {

    @Bean
    EomTest eomTest(){
        return new EomTest();
    }
    static public class EomTest{ 
        public void sayNo(){
            System.out.println("NO!");
        }
    }
}

 

AutoAppConfig에 @Configuration이 없어도
eomTest라는애가 싱글톤으로 관리가 되나요?

확인하는 방법을 몰라서 여쭈어 봅니다...

답변 1

1

안녕하세요. hi_man159님, 공식 서포터즈 David입니다.

@Configuration이 없으면 AutoAppConfig 내 eomTest()가 스프링 컨테이너에 의해 최초 호출되어 반환되는 EomTest의 인스턴스는 싱글톤 빈으로 등록됩니다.

이후 eomTest()를 또 다시 호출하게 되면 새로운 객체가 반환됩니다.

만약 재차 호출시 컨테이너에 등록된 싱글톤 빈을 반환 받으려면 @Configuration 을 붙여주셔야 합니다.

 

테스트의 경우 아래 코드를 질문자분 상황에 맞게 변경하여 테스트 해보시면 됩니다.

public class ConfigurationTest {

    @Test
    void primarySourceWithConfigurationAnnotation() {
        AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(FooConfiguration.class);

        FooConfiguration fooConfiguration = ac.getBean(FooConfiguration.class);

        ConfigurationSingleton configurationSingleton1 = fooConfiguration.configurationSingleton();
        System.out.println(configurationSingleton1);

        ConfigurationSingleton configurationSingleton2 = fooConfiguration.configurationSingleton();
        System.out.println(configurationSingleton2);
    }

//    @Configuration
    static class FooConfiguration {
        @Bean
        public ConfigurationSingleton configurationSingleton() {
            return new ConfigurationSingleton();
        }
    }
}

감사합니다.

hi_man159님의 프로필 이미지
hi_man159

작성한 질문수

질문하기