@Resource는 @Autowired와 같이 property injection을 위한 어노테이션이다.
차이점은
@Autowired는 객체 타입을 보고 맵핑 된다면
@Resource는 객체 name(id)를 보고 맵핑이 된다.
@Resource() 괄호에 객체 name을 명시하지 않으면 @Autowired 처럼 해당 레퍼런스변수의 타입과 똑같은 객체 name을 찾는다.
@Resource(name="testClass") 라고 별도로 명시 한다면 해당 name을 가진 class와 맵핑한다.
다시 말해서
설정파일의 <bean id="testClass" class="com.TestClass"/> bean태그에 설정된 id(name도 가능)를 찾아서 맵핑
혹은
@Component
public class TestClass{
}
@Component("testClass")
public class TestTestClass{
}
로 설정되어 있는 class를 찾아서 맵핑
따라서 @Controller나 @Service, @Repository 어노테이션을 사용한 클래스도 name만 같다면 맵핑된다.
같은 얘기지만
@Controller("testController")
라고 명시되어 있으면
@Resource(name="testController") 라고 맵핑 해주면 된다.
만약 변수 이름이 아래와 같다면(@Resource name을 명시하지않으면)
@Resource
TestController testController
@Autowired같이 name이 아닌 레퍼런스변수타입인 TestController의 객체를 찾아서 맵핑한다.
참고로
@Resource
@Resource()
똑같다
'spring > Annotation' 카테고리의 다른 글
@Scope - @Component 옵션 (0) | 2014.05.07 |
---|---|
@Value, Spring EL (0) | 2014.05.07 |
어노 테이션을 사용하기 위한 설정 (0) | 2014.05.02 |
@component : @Service,@Repository,@Controller (0) | 2014.05.02 |
@Autowired (2) | 2014.05.02 |