component-scan과 @Component
base-package에 패키지를 어디부터 스캔할지 지정해주며, 자동으로 클래스를 검색하여 빈으로 등록해주는 것이다. 또한 스캔할 패키지를 여러개로 지정해줄 수도 있다.
지정된 패키지를 검색해서 @Component, @Controller 등 같은 컴포넌트 스캔대상의 어노테이션, 또는 하위 어노테이션이 적용된 클래스를 검색해서 빈으로 등록하여 준다. 그리고 stereotype 애노테이션(고정된 또는 일반적인 패턴 의미. 예를 들어, @Controller가 선언된 클래스를 Controller 클래스로 자동 인식)인 @Component, @Controller, @Service, @Repository로 등록된 빈은 디폴트로 스캔해준다. 다음은 각 어노테이션의 관계를 보여주는 그림이다.
@Component는 포괄적인 선언이고, @Repository, @Service, @Controller는 각각의 역할에 더욱 집중된 선언이다.
기존에 XML 설정 파일에 빈 정보를 일일히 등록해주어야 하는 번거로움이 있었지만, component-scan을 이용하면서 일일히 빈을 등록하지 않게 되었다. 기존에는 아래와 같이 XML 설정 파일에 빈을 등록해주었다.
<bean id="testMainService" class="service.MainServiceImpl"></bean> |
ex) component-scan 등록
<context:component-scan base-package="com.lee"/>
@Component
- Spring 컨테이너가 component-scan에 의해서 자동으로 bean을 등록할 대상으로 지정된다.
- 이것은 applicaionContext.xml 혹은 application-config.xml 에 해당클래스의 bean이 생성되는 것을 의미한다.
- 이 때 bean의 name(이름)을 지정할 수 있는데, 방법은 @Component("testMainService")처럼 @Component("bean의 이름")하면 된다.
- name(이름)을 쓰지 않고 @Component만 쓸 경우 지정한 클래스(MainServiceImpl)의 이름에서 첫글자를 소문자로 바꾼
이름(mainServiceImpl)으로 bean이 생성된다.
- 빈의 범위를 설정하고 싶다면 @Scope 를 이용한다.
ex)
MainServiceImpl.java
package service; import org.springframework.stereotype.Component;
@Component("testMainService") @Scope("prototype") public class MainServiceImpl implements MainService { private String name = "test";
@Override public String getClassName() { return "MainServiceImpl-" + name; } } |
'Framework > Spring' 카테고리의 다른 글
[스프링3] 이클립스에서 스프링(Spring) 메이븐(MAVEN) 프로젝트 새로 만들기 (0) | 2014.09.27 |
---|