Spring 3.0.5 не оценивает аннотацию @Value из свойств - PullRequest
28 голосов
/ 11 марта 2011

Пытаться автоматически связать свойства с компонентом в Spring 3.0.5.RELEASE , я использую:

  • config.properties

    username=myusername
    
  • main-components.xml:

    <context:property-placeholder location="classpath:config.properties" />
    
  • MyClass:

    @Service
    public class MyClass {
    
        @Value("${username}")
        private String username;
        ...
    }
    

В результате для имени пользователя устанавливается буквально "${username}", поэтому выражение не анализируется. Мои другие автоматические зависимости этого класса установлены, и Spring не выдает никаких исключений. Я также пытался добавить @Autowired, но это не помогло.

Если я анализирую свойства для отдельного компонента, а затем использую @Autowired + @Qualifier, он работает:

<bean id="username" class="java.lang.String">
    <constructor-arg value="${username}"/>
</bean>

Есть идеи, как использовать просто @Value? Может быть, мне нужно включить некоторую зависимость от Spring, которой у меня нет? Спасибо

1 Ответ

20 голосов
/ 11 марта 2011

Нашел, в чем проблема.Скопировать / вставить из комментариев:

Вы уверены, что <context:property-placeholder> находится в том же контексте приложения, что и ваш компонент MyClass (не в родительском контексте)?- axtavt

Ты прав.Я переместил <context:property-placeholder> из контекста, определенного ContextLoaderListener, в контекст сервлета.Теперь мои значения анализируются.Большое спасибо!- alex

...