2024. 11. 14. 20:05ㆍSpring Framework/Spring IoC
Spring은 JSR-250의 @Resource 애노테이션(jakarta.annotation.Resource)을 필드나 빈 속성 세터 메서드에 사용하여 주입을 지원합니다. 이는 Jakarta EE에서 흔히 사용되는 패턴으로, 예를 들어 JSF 관리 빈과 JAX-WS 엔드포인트에서 사용됩니다. Spring은 Spring 관리 객체에 대해 이 패턴을 지원합니다.
@Resource에는 name 속성이 있습니다. 디폴트로 Spring은 이 값을 주입할 빈 이름으로 해석합니다. 즉, 이름에 따른(by-name) 주입 방식을 따르며, 다음 예제와 같이 사용할 수 있습니다:
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Resource(name="myMovieFinder") (1)
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
}
이 라인은 @Resource를 주입합니다.
이름이 명시적으로 지정되지 않은 경우, 디폴트 이름은 필드 이름이나 세터 메서드에서 유도됩니다. 필드의 경우 필드 이름을 따르고, 세터 메서드의 경우 빈 속성 이름을 따릅니다. 다음 예제는 movieFinder라는 이름의 빈을 세터 메서드에 주입하게 됩니다.
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Resource
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
}
애노테이션에 제공된 이름은 CommonAnnotationBeanPostProcessor가 인식하는 ApplicationContext에 의해 빈 이름으로 해석됩니다. Spring의 SimpleJndiBeanFactory를 명시적으로 구성하면 이름을 JNDI를 통해 해석할 수 있습니다. 그러나 디폴트 동작을 사용하는 것이 좋으며, 간접성을 유지하기 위해 Spring의 JNDI 조회 기능을 사용하는 것을 권장합니다.
@Resource를 사용할 때 명시적인 이름을 지정하지 않은 경우에 한해, @Autowired와 유사하게 특정 이름이 아닌 디폴트 타입 일치를 찾으며, 다음과 같은 잘 알려진 해석 가능한 의존성들을 해결합니다: BeanFactory, ApplicationContext, ResourceLoader, ApplicationEventPublisher, 그리고 MessageSource 인터페이스들입니다.
따라서, 다음 예제에서 customerPreferenceDao 필드는 먼저 "customerPreferenceDao"`라는 이름의 빈을 찾고, 그다음에 CustomerPreferenceDao 타입의 디폴트 타입 일치로 대체됩니다.
public class MovieRecommender {
@Resource
private CustomerPreferenceDao customerPreferenceDao;
@Resource
private ApplicationContext context; (1)
public MovieRecommender() {
}
// ...
}
(1) context 필드는 잘 알려진 해석 가능한 의존성 타입인 ApplicationContext를 기반으로 주입됩니다.
'Spring Framework > Spring IoC' 카테고리의 다른 글
Using @PostConstruct and @PreDestory (0) | 2024.11.14 |
---|---|
Using @Value (0) | 2024.11.14 |
Using CustomAutowireConfigure (0) | 2024.11.14 |
Using Generics as Autowiring Qualifiers (0) | 2024.11.14 |
Using JSR 330 Standard Annotations (0) | 2024.11.14 |