@Component
애너테이션은 클래스가 스프링 빈을 표현한다는 사실을 나타냅니다.
애플리케이션에서는 용도에 맞게 @Component
를 사용합니다.
@Controller - 컨트롤러 @Service - 서비스 @Repository - DAO
각각의 애너테이션은 다시 @Component로 메타 애너테이션
됩니다.
애너테이션의 값을 지정하는 방법은 세가지가 있습니다.
아래 세가지 방식은 모두 동일한 값을 나타냅니다.
애너테이션에서 별도로 값을 지정하지 않으면, 클래스의 첫 번째 글자를 소문자로 변환해서 빈 이름으로 사용합니다.
import org.springframework.stereotype.Service; @Service(value="springTestService") public class SpringTestServiceImpl implements SpringTestService { } @Service("springTestService") public class SpringTestServiceImpl implements SpringTestService { } @Service public class SpringTestServiceImpl implements SpringTestService { }
그럼 스프링에서는 어떻게 컴포넌트 애너테이션을 통해 빈 클래스를 등록할까요?
바로 클래스경로 스캐닝 (classpath scanning)
기능을 통해 컨테이너에 자동으로 등록합니다.
ComponentScan
애너테이션을 통해 간단하게 설정이 가능합니다.
참고로 예전에는 XML 파일에 직접 스캐닝 설정을 추가했습니다.
import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration @ComponentScan(basePackages = {"패키지명"}) public class ApplicationConfig { } @Configuration @ComponentScan(basePackageClasses = {"클래스명"}) public class ApplicationConfig { }
일반적인 프로젝트에서는 패키지명을 지정해 줍니다.
또한 필터 옵션을 통해 특정 클래스만 등록이나 제외가 가능합니다.
스캐닝 기능은 나중에 자세히 알아보겠습니다.