【问题标题】:Spring: @Value vs. @Autowired弹簧:@Value 与 @Autowired
【发布时间】:2015-06-15 14:26:29
【问题描述】:

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

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

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

@Autowired
private SavedSearchService service;

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您简洁明了的回复!我真正的问题是我看到我的班级访问了错误的 Session bean - 我们仍在努力寻找原因。听起来使用 @Value 而不是 @Autowired 不是原因,尽管我们认为这是 Spring 问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    • 2018-02-24
    相关资源
    最近更新 更多