어노테이션 기반 설정
From JCFWiKi
- 스프링 2.5에서는 어노테이션 기반의 빈 관리가 가능합니다.
- 다양한 방법이 있지만, 여기서는 XML을 작성하지 않고 어노테이션을 사용하여 빈을 관리하는 방법을 소개합니다.
- 메커니즘
- 클래스 패키지를 스캐닝하여, 주어진 패턴에 맞는 빈들을 등록하고, 또한 해당 빈에 존재하는 어노테이션을 해석하여 빈들간의 관계를 설정하게 됩니다.
- 사용되는 어노테이션들은 다음과 같습니다.
- @component, @Repository, @Service, @Controller
- 샘플
- 다음의 샘플에서는 2개의 자바 클래스를 어노테이션으로 스프링에 등록하고 상호 협력하는 모습을 보여주고 있습니다.
- 스프링 프레임워크는 applicationContext.xml의 <context:component-scan /> 태그에 명시된 패키지를 포함한 하위 패키지에서 스프링 어노테이션이 적용된 클래스들을 찾아 스프링 프레임워크에 빈으로 등록합니다.
- 프라퍼티에 @Autowired 어노테이션이 설정되었다면 해당 프라퍼티에 맞는 타입을 찾아 인젝션 해주게 됩니다.
- SimpleMovieLister.java
@Service public class SimpleMovieLister { private MovieFinder movieFinder; @Autowired public SimpleMovieLister(MovieFinder movieFinder) { this.movieFinder = movieFinder; } }
- JpaMovieFinder.java
@Repository public class JpaMovieFinder implements MovieFinder { // omitted }
- applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <context:component-scan base-package="org.example"/> </beans>
- <context:component-scan /> 의 사용법
- <context:component-scan/>은 자바 클래스 패키지를 스캐닝하여, 스프링 어노케이션에 따라 적합하게 빈 정의와 관계를 설정하는 태그 컴포넌트 입니다.
- 기본적으로 base-package 라는 속성(attribute)에 명시된 패키지를 포함한 하위 패키지의 자바 클래스들을 스캐닝 합니다.
- base-package 에 포함된 자바 클래스를 스캐닝 하는데 있어서 다음과 같은 타입의 필터링을 추가할 수 있습니다.
- annotation, assignable, regex, aspectj
<beans ...> <context:component-scan base-package="org.example"> <context:include-filter type="regex" expression=".*Stub.*Repository"/> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/> </context:component-scan> </beans>
