1

У меня возникли проблемы с инъекцией в приложении, над которым я работаю (с использованием Spring Version 3.1.2). Начнем с того, что я вижу много кода, как это:Spring: @Value vs. @Autowired

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

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

@Autowired 
private SavedSearchService service; 

Каждый из этих трех, как представляется, имеют эффект автоматического связывания указанного боб/услугу в классе. Я не понимаю, какая разница между @Value и @Autowired в этих случаях? Каждый пример, который я нашел в Интернете, как представляется, использует @Value для ввода значений из файла свойств. В этом случае SearchResponse и SearchRequest являются абстрактными классами.

Я надеюсь, что лучшее понимание этого поможет мне решить некоторые проблемы, которые у меня возникают с моим сеансом.

ответ

6

@Value может использоваться для ввода значений по умолчанию. Хорошим примером является введение значения по умолчанию String в качестве значения файла свойства. В вашем примере @Value используется для установки значения по умолчанию для класса, который является управляемым Spring компонентом.

@Autowired не может использоваться для первого примера: это не файл свойств. @Autowired is только для DI из фасоли. Это более конкретно, чем @Value, но вы можете использовать @Value, чтобы сделать то же самое.

Вот хороший учебник для @Value: http://www.mkyong.com/spring3/spring-value-default-value/

+0

спасибо за ясный, лаконичный ответ! Моя реальная проблема заключается в том, что я вижу неправильный сеансовый компонент, доступный из моего класса, - мы все еще работаем, чтобы найти причину. Похоже, использование '@ Value' вместо' @ Autowired' не является причиной, хотя мы думаем, что это проблема Spring. –