이전 강의들에서는
@Bean
등을 통해서 직접 스프링 빈을 등록함 (귀찮음)설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔
설정 정보에@ComponentScan
을 붙여주기만 하면 됨
컴포넌트 스캔은 이름 그대로 @Component
어노테이션이 붙은 클래스들을 스캔해서 스프링 빈으로 등록
@Autowired
를 사용하면, 생성자에서 여러 의존관계도 한번에 주입 가능
순서
1. @ComponentScan
@ComponentScan
은 @Component
가 붙은 모든 클래스를 스프링 빈으로 @Component("name")
으로 직접 이름 지정도 가능@Autowired
를 지정하면, 스프링 컨테이너가 자동으로 해당 스프링 빈을 찾아서 주입탐색 위치 지정
@ComponentScan(
basePackages = "hello.core", //배열도 가능
}
지정하지 않으면, @ComponentScan
이 붙은 클래스의 패키지가 시작 위치가 됨
설정 정보 클래스의 위치를 프로젝트 최상단에 두는걸 권장
@Controller
: 스프링 mvc 컨트롤러로 인식@Repository
: 데이터 접근 계층으로 인식 =>@Configuration
: 설정 정보로 인식, 싱글톤을 위한 추가 처리@Service
: 개발자들에게 알려주는용도 ???컴포넌트 스캔시 같은 빈을 등록하면?
case 1 : 자동 빈 등록 vs 자동 빈 등록
case 2 : 자동 빈 동록 vs 수동 빈 등록
ConflictingBeanDefinitionException
수동 등록 빈이 우선권을 가짐 (오버라이딩)
스프링 부트에서는 오류발생!