Whiteship's Note

'Spring 애노테이션'에 해당되는 글 1건

  1. 2007.08.02 3.11.1. @Component and @Repository

3.11.1. @Component and @Repository

Spring/Chapter 3 : 2007.08.02 10:01


Spring 2.0에 새로 도입한 @Repository 애노테이션은 스테레오타입 애노테이션으로 DAO 역할을 하는 클래스를 나타냈었으며 해당 클래스에서 발생하는 DB 관련 예외를 Spring의 DAOException으로 전환해주는 일을 했습니다. 참조

Spring 2.1에는 '스테레오 타입이 붙은' 클래스를 모두 찾아서 ApplicationContext의 BeanDefinition 객체로(<bean>태그를 읽어서 이 객체 형태로 가지고 있게 되지요.) 만들어 주는 역할을 하는 새로운 스테레오타입 애노테이션인 @Component를 추가했습니다.

물론 그럴 떄 필요한 Post Processor를 등록해야 하는데 그 부분을 숨겨두고 사용하기 편하게 태그 한 줄로 등록할 수 있습니다.

AutowiredAnnotationBeanPostProcessor 와 CommonAnnotationBeanPostProcessor를 등록해주는 태그는 다음과 같습니다.

<context:component-scan base-package="org.example"/>

사용자 삽입 이미지
Spring IDE 2.0을 설치 하셨다면 Spring 설정파일 안에서 'Ctrl + 스페이스' 만으로 해당 태그를 찾을 수 있습니다.
@Repository
public class MovieFinder {

}

@Component
public class SimpleMovieLister {

   @Resource(name="myMovieFinder")
   private MovieFinder movieFinder;

   ...
}

<?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.0.xsd
          http://www.springframework.org/schema/context
          http://www.springframework.org/schema/context/spring-context-2.1.xsd">

   <context:annotation-config />
   <context:component-scan base-package="whiteship"  />

</beans>

그리고 다음과 같은 테스트 코드를 돌려서 확인해 볼 수 있습니다.

public class DITest extends AbstractDependencyInjectionSpringContextTests{

   private SimpleMovieLister lister;

   public void setLister(SimpleMovieLister lister) {
       this.lister = lister;
   }

   @Override
   protected String[] getConfigLocations() {
       return new String[]{"classpath:whiteship/applicationContext.xml"};
   }

   public void testDI() throws Exception {
       assertNotNull(lister.getMovieFinder());
   }
}

결과는 에러~
이유는? asm 라이브러리가 필요합니다.
구체적으로는 asm.jar 와 asm-commons.jar 가 필요합니다.

그리고 주의 할 것!
@Component나 @Repository 애노테이션에 별도의 bean name을 지정하지 않았다면 bean의 이름을 사용하여 DI하기 위해 사용했었던 @Resource 애노테이션은 걷어내고 @Autowired로 바꿔주어야 합니다.


top