对于最新稳定版本,请使用Spring Framework 7.0.1spring-doc.cadn.net.cn

注入@Resource

Spring 也支持使用 JSR-250 进行喷射@Resource注解 (jakarta.annotation.资源)在字段或豆属性设置器方法上。 这是雅加达电子工程的常见模式:例如,JSF管理的豆子和JAX-WS 端点。Spring 也支持这种模式用于 Spring 管理的对象。spring-doc.cadn.net.cn

@Resource取一个名称属性。默认情况下,Spring 将该值解释为 豆子的名字要注入。换句话说,它遵循了名称语义, 如下例所示:spring-doc.cadn.net.cn

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的物业名称。以下示例将有豆子 叫电影查找器注入其二传法:spring-doc.cadn.net.cn

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,应用事件发布者消息源接口。spring-doc.cadn.net.cn

因此,在以下例子中,customerPreferenceDao菲尔德首先寻找一颗豆子 命名为“customerPreferenceDao”,然后退回到该类型的主类型匹配CustomerPreferenceDao:spring-doc.cadn.net.cn

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 上下文场是基于已知可解析依赖类型进行注入的:应用上下文.