컴포넌트 스캔
[인프런] 스프링 핵심 원리 - 기본편
@Component
@Autowired
📍 일일이 스프링 빈을 등록하는 것은 누락, 귀찮음 등의 문제 발생시킴!
@Configuration
@ComponentScan(excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class))
// 기존 코드를 수정하지 않고 남겨두기 위해 exclude함
public class AutoAppConfig {
}
📎 @ComponentScan
: @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록함
: 사용하는 각 클래스에 @Component를 붙이면 됨
📎@Autowired
: 자동으로 의존관계 주입을 해줌
↪ 생성자에 @Autowired를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입
: 생성자에서 여러 의존관계도 한 번에 주입하는 것 가능
: 기본 조회 전략은 타입이 같은 빈을 찾아서 주입하는 것 (getBean(MemberRepository.class))와 동일하다고 이해
@Component
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository;
@Autowired
public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
```
📎모든 자바 컴포넌트를 전부 스캔하면 시간이 오래 걸리게 됨 => basePackages: 탐색 시작 위치 지정 가능
📎패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단(프로젝트 시작 루트 위치)에 두는 것을 권장
📎com.hello에 AppConfig 같은 메인 설정 정보를 두고, @ComponentScan 을 붙이는 방식
📎스프링 부트를 사용하면 @SpringBootApplication을 프로젝트 시작 루트 위치에 두는 것이 관례(여기에 @ComponentScan이 들어있음)
@ComponentScan(
basePackages = "hello.core.member",
)
📌@ComponentScan은 다음을 추가로 포함하고 있음
@Component : 컴포넌트 스캔에서 사용
@Controller : 스프링 MVC 컨트롤러로 인식
@Service : 스프링 비즈니스 로직에서 사용
@Repository : 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해줌
@Configuration : 스프링 설정 정보로 인식
@Service : 특별한 처리를 하지 않음. 개발자들이 핵심 비즈니스 로직의 위치 인식에 도움을 주는 용도
📌필터
includeFilters : 컴포넌트 스캔 대상을 추가로 지정
excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정