Spring:@Value 与@Autowired

Spring: @Value vs. @Autowired

我在我正在处理的应用程序中遇到一些注入问题(使用 Spring 版本 3.1.2)。首先,我看到了很多这样的代码:

@Value("#{searchRequestBean}")
private SearchRequest searchRequest;

@Value("#{searchResponseBean}")
private SearchResponse searchResponse;

@Autowired
private SavedSearchService service;

这三个中的每一个似乎都具有将指定的 bean/service 自动装配到 class 中的效果。我不明白的是,在这些情况下 @Value@Autowired 有什么区别?我在网上找到的每个示例似乎都使用 @Value 从属性文件中注入值。在这种情况下,SearchResponseSearchRequest 是抽象的 classes.

我希望更好地理解这一点将帮助我解决我在使用会话 bean 时遇到的一些问题。

@Value 可用于注入默认值。一个很好的例子是将 String 的默认值注入 属性 文件的值。在您的示例中,@Value 用于将 class 的默认值设置为 Spring 托管 bean。

@Autowired 不能用于第一个示例:它不是 属性 文件感知的。对于 bean 的 DI,@Autowired。它比 @Value 更具体,但您可以使用 @Value 来做同样的事情。

@Value 有一个很好的教程:http://www.mkyong.com/spring3/spring-value-default-value/