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

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

식빵님의 프로필 이미지
식빵

작성한 질문수

스프링 핵심 원리 - 기본편

컴포넌트 스캔과 의존관계 자동 주입 시작하기

src/main/java 에 있는 @ComponentScan이 src/test/java 의 @Component도 자동 등록하나요?

해결된 질문

작성

·

366

0

완강하고 복습을 하고 있는데 문득 의문이 들어서 질문 드립니다.

src/main/java 에 있는 @ComponentScan이
src/test/java 의 @Component도 자동 등록하나요?

이 질문이 나오게 된 것은 5:22 에서 "참고" 부분에 대한 설명을 하실 때,  @ComponentScan에 Filter를 걸어서 Configuration 어노테이션이 있는 것들은 스캐닝 대상에서 모두 제외하겠다고 하셨습니다.

그런데 AppConfig는 AutoAppConfig는 같은 패키지에 위치하니까 제외를 해야되는 건 이해했습니다.

문제는 src/test/java 에 있는 

    @Configuration
    static class TestConfig {

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

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

도 제외를 시키기 위함이다. 라는 설명이 있습니다.

AutoAppConfig와 TestConfig는 서로 디렉토리 위치가 완전히 다른데도,  TestConfig는 AutoAppConfig의 스캔 대상이 되는 건가요??

답변 2

2

식빵님의 프로필 이미지
식빵
질문자

테스트를 인식하고 안하고가 어디서 실행을 하느냐에 따라 다를 줄은 정말 상상도 못했습니다;
명확한 답변 정말 정말 감사합니다.

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. devToroko님

테스트 케이스에서 실행을 하는 경우에는 테스트도 인식되어 버립니다.

예를 들어서 AutoAppConfigTest 같은 경우는 테스트 케이스에서 실행하기 때문에, 다음 둘다 컴포넌트 스캔의 대상이 됩니다.

src/main/java

src/test/java

반면에 CoreApplication 처럼 src/main/java 영역에서 실행하면 test는 사용하지 않습니다.

감사합니다.

식빵님의 프로필 이미지
식빵

작성한 질문수

질문하기