컴포넌트 스캔
컴포넌트 어노테이션이 붙은 클래스를 모두 스프링 빈으로 자동 등록해준다.
@Autowired가 의존관계를 자동 주입해준다.
의존관계 자동 주입
파라미터의 클래스 타입을 확인하고 빈으로 등록된 클래스 중 호환되는 클래스를 자동으로 주입함
참고: 어노테이션이 상속 기능을 지원하는 것 같이 보이지만 자바가 아닌 스프링에서 지원하는 기능이다.
@Controller 스프링 MVC 컨트롤러로 인식
@Repository 데이터 접근 계층으로 인식
@Configuration 설정 정보를 인식, 싱글톤 유지
@Service 사실 특별한 처리는 없음, 비즈니스 로직이 여기 있구나 알려주는 정도
필터
includeFilters 추가로 포함할 컨테이너 설정
excludeFilters 추가로 제외할 컨테이너 설정
중복 등록과 충돌
빈 이름이 같은 컴포넌트는 어떻게 처리할까?
자동 빈 등록 vs 자동 빈 등록
에러 발생
자동 빈 등록 vs 수동 빈 등록
수동 빈 등록이 우선권을 가짐
수동 빈이 오버라이딩 됨
그러나 잡기 어려운 버그가 발생할 수 있다 → 최근 스프링부트는 오류로 처리함