본문 바로가기
프로그래밍/Spring

@ComponentScan을 사용한 자동 Bean등록

by Mr-후 2019. 4. 16.
반응형

@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



반응형