@Component
는 Spring에서 관리되는 객체임을 표시하기 위해 사용하는 가장 기본적인 annotation입니다.
즉, scan-auto-detection과 dependency injection을 사용하기 위해서 스프링 컨테이너에 등록하는, 가장 기본 어노테이션입니다.
스프링 문서를 확인하면 다음이 명시되어있습니다.
따라서 컴포넌트 클래스들에 포괄적으로@Component
를 붙일 수 있지만, @Repository
, @Service
, @Controller
의 역할을 명시적으로 구분해주기 위해 각자 분리해서 사용합니다
Annotation | Layer | UseCase |
---|---|---|
@Repository | Persistence Layer | DB에 접근하는 코드 |
@Service | Business Layer | DB에 접근하는 코드는 repository에 위임 비즈니스 로직과 관련된 모든 코드 |
@Controller | Presentation Layer | 클라이언트로 부터 요청이 왔을 때, dispatcherservlet이 handleradapter를 통해 컨트롤러를 찾기 위해 '컨트롤러' 역할을 한다고 명시 |
스프링에서도 @Component
보다는 @Repository
, @Service
, @Controller
를 권장하고 있습니다.
Spring
Spring에서 @Component, @Repository & @Service 주석의 차이점은 무엇입니까?
@Service, @Controller, @Repository 과 @Component의 차이는?
[Spring] @Bean 과 @Component 차이