@ComponentScan을 사용한 자동 Bean등록
DI컨테이너에 등록할 Bean을 하나하나 정의하기가 번거롭다는 것인데 스프링 프레임워크는 Bean을 DI 컨테이너에 자동으로 등록하는 컴포넌트 스캔(component scan)이라는 기능을 통해 이 문제를 해결한다.
@ComponentScan 애너테이션을 붙이면 이 클래스의 패키지 내부에 있는 모든 클래스를 검색하여 @Component와 같은 특정 애너테이션이 붙은 자바 클래스를 찾아내서 DI컨테이너에 등록한다.
@ComponentScan
public class App {
.... code here
}
대상 패키지를 변경하려면 basePackages속성에 패키지를 지정할 수 있다.
각 클래스에서는 다음과 같은 애너테이션을 사용한다.
@Component
public class SomeClass {
//....
}
스프링 프레임워크에는 @Component외에도 컴포넌트 스캔의 대상이 되는 애너테이션이 있다.
■ 컴포넌트 스캔의 대상이 되는 애너테이션
@Controller
웹 MVC 프레임워크인 스프링 MVC의 컨트롤러를 나타내는 애너테이션, 스프링4에서는 REST웹 서비스용으로 @RestController를 추가했다.
@Service
서비스 클래스를 나타내는 애너테이션. 기능 면에서 @Component와 다르지 않다.
@Repository
리포지토리 클래스를 나타내는 애너테이션. 이 애너테이션이 붙은 클래스 안에서 발생한 예외는 특수한 규칙에 따라 스프링이 제공하는
DataAccessException으로 교체된다.
리포지토리(repository)는 에릭 에반스(Eric Evans)가 자신의 저서 <Domain-Driven Design(Addision Wesley, 2003)>에서 도메인 주도 설계(Domain-Driven Design)를 소개하며 정의한 역할이며, 리포지토리는 ㅗ메인 객체를 보존하거나 얻어오고 검색하는 조작을 캡슐화하며 컬렉션 객체와 동일한 역할을 담당한다. 리포지토리에는 로직을 포함하면 안된다.
@Configuration
'프로그래밍 > Spring' 카테고리의 다른 글
JdbcTemplate 사용 예제 (0) | 2019.04.17 |
---|---|
CommandLineRunner이용 및 어플리케이션 구조 (0) | 2019.04.16 |
스프링 프레임워크에서 셋터, 생성자로 주입 예제 (0) | 2019.04.16 |
@Data, Lombok 어노테이션 (0) | 2019.04.08 |
Spring DispatcherServlet과 MVC아키첵처 (0) | 2019.03.28 |