@Component
- <context:component-scan base-package=""/> 태그를 사용해서 스프링이 클래스를 검색할 패키지를 지정
- <context:component-scan base-package=""/> 태그는 해당 패키지에서 @Component 어노테이션이(또는 하위 어노테이션) 적용된 클래스를 검색하여 빈으로 자동등록
- 따라서 XML 설정 파일에 다향한 빈 정보를 추가하지 않아도 됨
AbstractServiceImpl.java
package service; import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@Component("service01") @Scope("prototype") } |
●//<bean id="service01" class="service.AbstractServiceImpl"></bean> 와 동일
●빈의 범위를 설정하고 싶다면 @Scope 어노테이션을 이용하면 됨
AbstractServiceImpl02.java
package service; import org.springframework.stereotype.Component;
@Component("service02") } |
●//<bean id="service02" class="service.AbstractServiceImpl02"></bean> 와 동일
AbstractController.java
package controller; import javax.annotation.Resource; import org.springframework.beans.factory.annotation.Autowired; import service.AbstractService;
@Component
@Resource(name="service01") |
spring301-servlet.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" <context:annotation-config/> |
●XML의 설정이 간결해짐.
※결과
START >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> |
◆스프링은 기본적으로 검색된 클래스를 빈으로 등록할 때, 클래스의 이름(첫 글자는 소문자)을 빈 이름으로 사용
◆빈 이름을 특정이름으로 설정하고 싶다면 다음과 같이 작성 => @Component("beanName")
위의 예에서 만약 @Component("service01")를 @Component로 작성했다면 아래코드와 같음
<bean id="abstractServiceImpl" class="service.AbstractServiceImpl"></bean>
◈ 스캔 대상 클래스 범위 지정 - 필터사용
<context:include-filter type="" expression=""/> : 자동 스캔 대상에 포함시킬 클래스
<context:exclude-filter type="" expression=""/> : 포함시키지 않을 클래스
▶ 사용 예
<context:component-scan base-package="service"> <context:include-filter type="regex" expression=".*service"/> <context:exclude-filter type="aspectj" expression="..*service"/> </context:component-scan> |
<context:include-filter>, <context:exclude-filter> 태그는 type 속성과 expression 속성을 가짐
● type 속성에 올 수 있는 값
type 속성 |
설 명 |
annotation |
클래스에 지정한 어노테이션이 적용됐는지의 여부. expression 속성에는 "org.example.SomeAnnotation"와 같이 어노테이션 이름을 입력 |
assignable | 클래스가 지정한 타입으로 할당 가능한지의 여부. expression 속성에는 "org.example.SomeClass"와 같이 타입 이름을 입력 |
regex |
클래스 이름이 정규 표현식에 매칭되는 지의 여부. expression 속성에는 "org.example.Default.*"와 같이 정규 표현식을 입력 |
aspectj |
클래스 이름이 AspectJ의 표현식에 매칭되는 지의 여부. expression 속성에는 "org.example..*Service+"와 같이 AspectJ의 표현식을 입력 |
[참고자료] Spring 3.0 프로그래밍-최범균
'프로그램 > Spring 3.0' 카테고리의 다른 글
@Configuration, @Bean - 2(@ImportResource) (0) | 2012.04.26 |
---|---|
@Configuration, @Bean - 1 (0) | 2012.04.25 |
@PostConstruct, @PreDestroy (0) | 2012.04.25 |
@Resource (0) | 2012.04.24 |
@Autowired (2) | 2012.04.24 |