강의

멘토링

로드맵

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

ShinS님의 프로필 이미지
ShinS

작성한 질문수

스프링 핵심 원리 - 기본편

자동, 수동의 올바른 실무 운영 기준

컴포넌트 스캔 관련 질문

작성

·

302

0

@Component 를 붙인 것들은 모두 @ComponentScan의 자동 빈 등록의 대상이 됩니다. 그런데 basePackageClasses 의 범위가 있다면 해당 패키지 내부에서만 빈 등록 대상을 찾게됩니다.

1. @SpringBootApplication 에는 이미 @ComponentScan이 있습니다. 해당 부트의 basePackageClass 를 변경하지 않는 한 임의의 Configration 내부에 Bin 을 쓰든 Component 안에 Bin을 주입하든 사실상 이미 부트가 모든 Component 를 관리하고 있어서 위 시점에서는 수동 주입한다는 개념이 없는것이 맞는건가요.

2. 위 질문과 비슷한 질문인데요.. 제가 임의의 스프링부트에 Aconfig 와 Bconfig 를 만들었다고합시다. 그리고 동일하게 컴포넌트 스캔을 이용하여 각각 다른 패키지를 basePackageClass 를 지정했다고 한다면 이게 어떤 의미가 있는걸까요?  @SpringBootApplication 에는 디펄트로 하위 모든 컴포넌트를 찾아서 자동등록을 하는데..

퀴즈

필드 주입(Field Injection) 방식이 일반적으로 권장되지 않는 이유는 무엇일까요?

불변성을 보장하기 어려워서

의존성 변경이 쉬워서

순수 Java 코드로 테스트하기 어려워서

설정 코드 작성이 복잡해서

답변 1

1

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

.
1. 스프링 컨테이너에 빈을 등록한다는 관점으로만 보자면 이해하신게 맞습니다. 다만, 어떤 기준에 의해 @Component, @Controller, @Service 등과 같은 애너테이션을 사용하지 않고 의존관계설정 클래스 내에서 관리가 필요하면 좋은 것들이 있습니다. 강의 내에서 기술지원 빈이라고 설명하는 것들입니다.

2. @ComponentScan은 스프링 3.1부터 도입되었습니다. 스프링부트가 없던 시절에는 @ComponentScan으로 스캔될 패키지를 수동으로 다 설정해줘야 했습니다. 스프링부트를 사용하신다면 의미를 못느끼실 수 있습니다.
.
감사합니다.

ShinS님의 프로필 이미지
ShinS
질문자

아~ 그렇다면 제가 생각했던게 맞았군요.

감사합니다

ShinS님의 프로필 이미지
ShinS

작성한 질문수

질문하기