|
对于最新稳定版本,请使用Spring Framework 7.0.1! |
注入@Resource
Spring 也支持使用 JSR-250 进行喷射@Resource注解
(jakarta.annotation.资源)在字段或豆属性设置器方法上。
这是雅加达电子工程的常见模式:例如,JSF管理的豆子和JAX-WS
端点。Spring 也支持这种模式用于 Spring 管理的对象。
@Resource取一个名称属性。默认情况下,Spring 将该值解释为
豆子的名字要注入。换句话说,它遵循了名称语义,
如下例所示:
-
Java
-
Kotlin
public class SimpleMovieLister {
private MovieFinder movieFinder;
@Resource(name="myMovieFinder") (1)
public void setMovieFinder(MovieFinder movieFinder) {
this.movieFinder = movieFinder;
}
}
| 1 | 该线注入@Resource. |
class SimpleMovieLister {
@Resource(name="myMovieFinder") (1)
private lateinit var movieFinder:MovieFinder
}
| 1 | 该线注入@Resource. |
如果没有明确指定名称,默认名称将由字段名称或
二传方法。对于字段,它采用字段名称。以二传法为例,
它采用了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他已经意识到了。
如果你配置 Spring 的,可以通过 JNDI 解析这些名称SimpleJndiBeanFactory明确地。不过,我们建议你依赖默认行为,
利用 Spring 的 JNDI 查找功能来保持间接层级。 |
在@Resource使用方式未明确指明名称,类似
自@Autowired,@Resource找到一个主要类型匹配,而不是特定的命名豆
并且解决了众所周知的可解析依赖关系:该豆子工厂,应用上下文,ResourceLoader,应用事件发布者和消息源接口。
因此,在以下例子中,customerPreferenceDao菲尔德首先寻找一颗豆子
命名为“customerPreferenceDao”,然后退回到该类型的主类型匹配CustomerPreferenceDao:
-
Java
-
Kotlin
public class MovieRecommender {
@Resource
private CustomerPreferenceDao customerPreferenceDao;
@Resource
private ApplicationContext context; (1)
public MovieRecommender() {
}
// ...
}
| 1 | 这上下文场是基于已知可解析依赖类型进行注入的:应用上下文. |
class MovieRecommender {
@Resource
private lateinit var customerPreferenceDao: CustomerPreferenceDao
@Resource
private lateinit var context: ApplicationContext (1)
// ...
}
| 1 | 这上下文场是基于已知可解析依赖类型进行注入的:应用上下文. |