어노테이션 기반 설정

From JCFWiKi

Jump to: navigation, search
  • 스프링 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>