
@Component가 붙은 모든 Class들을 자동으로 스캔하여 Bean으로 등록해주는 역할을 해주는 어노테이션이다.
@Component
public class MemoryMemberRepository implements MemberRepository{}
이 때, 스프링 빈의 기본 이름은 클래스 명을 사용하되 맨 앞글자만 소문자를 사용한다.

빈 이름을 직접 지정해주고 싶다면 @ComponentScan("memberService2")이런식으로 이름을 부여하면 된다.
모든 자바 클래스를 다 컴포넌트 스캔하면 시간이 오래 걸린다. 꼭 필요한 위치부터 탐색하도록 @ComponentScan의 탐색 시작 위치를 지정할 수 있다.
@ComponentScan{
basePakages = "hello.core"
}
basePackages : 탐색할 패키지의 시작 위치를 지정한다. 이 패키지를 포함하여 하위패키지를 모두 탐색한다.basePakages = "hello.core", "hello.service" 처럼 여러 시작 위치를 지정 할 수도 있다.@ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다.📌권장하는 방법
패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것을 권장한다.
예를들어, 프로젝트 구조가 다음과 같이 되어 있다면
com.hellocom.hello.servicecom.hello.repositorycom.hello가 프로젝트 시작루트가 되고, 여기에 AppConfig같은 메인 설정 정보를 두고 @ComponentScan애노테이션을 붙인다.
@ComponentScan은 @Component 뿐만 아니라 다음과 같은 어노테이션도 추가로 대상에 포함한다.
@Component : 컴포넌트 스캔에서 사용@Controller : 스프링 MVC컨트롤러에서 사용@Service : 스프링 비즈니스 로직에서 사용@Repository : 스프링 데이터 접근 계층에서 사용@Configuration : 스프링 설정 정보에서 사용