Injection with @Resource
(한글)
Spring은 또한 필드 또는 Bean 속성 설정자 메서드에 JSR-250 @Resource
어노테이션(jakarta.annotation.Resource
) 을 사용하여 주입을 지원합니다.
이는 JSF-관리 Bean 및 JAX-WS 엔드포인트와 같이 Jakarta EE에서 흔히 볼 수 있는 패턴입니다.
Spring은 Spring 관리 객체에서도 이 패턴을 지원합니다.
@Resource
는 이름 속성을 사용합니다.
기본적으로 Spring은 이 값을 주입할 Bean 이름으로 해석합니다.
즉, 다음 예제에서 볼 수 있듯이 이름별 의미론을 따릅니다:
-
Java
-
Kotlin
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Resource(name="myMovieFinder") (1)
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
}
1 | This line injects a @Resource . |
class SimpleMovieLister {
@Resource(name="myMovieFinder") (1)
private lateinit var movieFinder:MovieFinder
}
1 | This line injects a @Resource . |
이름이 명시적으로 지정되지 않은 경우 기본 이름은 필드 이름 또는 설정자 메서드에서 파생됩니다.
필드의 경우 필드 이름을 사용합니다.
세터 메서드의 경우 Bean 속성 이름을 사용합니다.
다음 예제에서는 movieFinder
라는 이름의 Bean을 세터 메서드에 주입합니다:
-
Java
-
Kotlin
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Resource
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
}
class SimpleMovieLister {
@set:Resource
private lateinit var movieFinder: MovieFinder
}
어노테이션과 함께 제공된 이름은 CommonAnnotationBeanPostProcessor 가 알고 있는 ApplicationContext 에 의해 Bean 이름으로 확인됩니다.
Spring의 SimpleJndiBeanFactory 를 명시적으로 구성하는 경우 JNDI를 통해 이름을 확인할 수 있습니다.
그러나 기본 동작에 의존하고 Spring의 JNDI 조회 기능을 사용하여 간접 지시 수준을 유지하는 것이 좋습니다.
|
명시적인 이름이 지정되지 않은 @Resource
사용의 독점적인 경우, 그리고 @Autowired
와 유사하게, @Resource
는 특정 이름의 Bean 대신 기본 유형 일치 항목을 찾고 잘 알려진 해결 가능한 종속성인 BeanFactory
, ApplicationContext
, ResourceLoader
, ApplicationEventPublisher
및 MessageSource
인터페이스를 해결합니다.
따라서 다음 예제에서 customerPreferenceDao
필드는 먼저 "customerPreferenceDao"라는 이름의 Bean을 찾은 다음 CustomerPreferenceDao
유형에 대한 기본 유형 일치로 되돌아갑니다:
Translated with www.DeepL.com/Translator (free version)
-
Java
-
Kotlin
public class MovieRecommender {
@Resource
private CustomerPreferenceDao customerPreferenceDao;
@Resource
private ApplicationContext context; (1)
public MovieRecommender() {
}
// ...
}
1 | context 필드는 알려진 해결 가능한 종속성 유형에 따라 주입됩니다:
ApplicationContext . |
class MovieRecommender {
@Resource
private lateinit var customerPreferenceDao: CustomerPreferenceDao
@Resource
private lateinit var context: ApplicationContext (1)
// ...
}
1 | The context field is injected based on the known resolvable dependency type:
ApplicationContext . |