등록해야할 스프링 빈이 많아지면 누락 등의 문제가 발생
⇒ 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능 제공
⇒ 의존관계도 자동으로 주입하는 @Autowired 기능도 제공
@ComponentScan은 @Component가 붙은 모든 클래스를 스프링 빈으로 등록한다
스프링 빈 기본 이름: 클래스명(단, 맨 앞 소문자)
생성자에 @Autowired 지정하면, 스프링 컨테이너가 자동으로 해당 빈을 찾아서 주입한다
관례) 설정 정보 클래스의 위치를 프로젝트 최상단에 두고, 패키지 위치는 별도로 지정하지 않는다.
→ 컴포넌트 스캔 탐색 위치를 별도로 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다
⇒ 모든 애노테이션에 @Component를 포함하고 있음
컴포넌트 스캔에서 같은 빈 이름을 등록할 경우
자동 빈 등록 vs 자동 빈 등록
ConflictingBeanDefinitionException 발생
수동 빈 등록 vs 자동 빈 등록
수동 빈이 자동 빈을 오버라이딩 해버린다 ⇒ 수동 빈 등록이 우선권 가짐
최근 스프링부트(CoreApplication 실행)에서는 수동 빈과 자동 빈 충돌 시 오류 발생하도록 기본 값 변경함