섹션 7 : 컴포넌트 스캔
컴포넌트 스캔 - 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록한다.
@Component 어노테이션이 붙은 모든 클래스를 스프링 빈으로 등록한다.
@Autowired - 의존관계를 자동으로 주입한다.
스프링 컨테이너는 타입을 기반으로 빈을 찾아 자동으로 주입한다.
basePackages : 탐색할 패키지의 시작 위치를 지정한다. 이 패키지를 포함한 하위 패키지를 모두 탐색한다.
@Configuration
@ComponentScan(
basePackages = "hello.core.member",
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {
}
위의 경우는 hello.core.member 클래스의 하위 패키지를 모두 탐색한다.
basePackages가 없으면 모든 자바 코드에서 찾기 때문에 매우 오래 걸리게 된다.
basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위치로 지정한다.
package hello.core;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
@Configuration
@ComponentScan(
basePackages = "hello.core.member",
basePackageClasses = AutoAppConfig.class,
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class)
)
public class AutoAppConfig {
}
위의 경우는 hello.core에서부터 찾게 된다.
만약 아무것도 지정하지 않는다면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다.
스프링 부트를 사용하면 @SpringBootApplication을 선언하게 되는데 그 설정 안에 @ComponentScan이 들어있어서, 자동으로 스프링빈에 등록이 된다.
따라서 스프링 부트의 대표 시작 정보인 @SpringBootApplication을 이 프로젝트 시작 루트 위치에 두는 것이 관례이다 .
스프링은 다음 어노테이션이 있으면 컴포넌트 스캔뿐만 아니라, 아래의 부가 기능을 추가로 수행하게 된다.
@Controller : 스프링 MVC 컨트롤러로 인식된다.
@Repository : 스프링 데이터 접근 계층으로 인식된다.
@Configuration: 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다.
@Service : 스프링이 따로 처리를 하지는 않지만, 핵심 비즈니스 로직이 여기에 있겠구나 하고 비즈니스 계층을 인식하는데 도움이 된다.
인텔리제이 단축키 ⇧⇧ (shift 키를) 연속으로 두 번 누르면 아래의 사진처럼 검색할 수 있는 창이 뜬다.
'Spring Study' 카테고리의 다른 글
[스프링 핵심 원리] - 기본편 #8 (0) | 2025.04.03 |
---|---|
[스프링 핵심 원리] - 기본편 #7 (0) | 2025.04.02 |
[스프링 핵심 원리] - 기본편 #5 (1) | 2025.03.21 |
[스프링 핵심 원리] - 기본편 #4 (1) | 2025.03.14 |
[스프링 핵심 원리] - 기본편 #3 (0) | 2025.03.11 |