春天:@Value vs. @Autowired

时间:2015-04-10 01:17:25

标签: java spring dependency-injection autowired spring-annotations

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

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

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

@Autowired
private SavedSearchService service;

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

我希望更好地理解这一点将有助于我解决我在Session bean中遇到的一些问题。

1 个答案:

答案 0 :(得分:8)

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

@Autowired无法用于第一个示例:它不支持属性文件。对于bean的DI,@Autowired 。它比@Value更具体,但您可以使用@Value执行相同的操作。

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