Ошибка @Value в Spring MVC 3.0.6 - PullRequest
       2

Ошибка @Value в Spring MVC 3.0.6

0 голосов
/ 19 февраля 2012

Я создал Службу и загружаю ее с помощью @Service ("amazonService"). Мой контекст приложения загружает этот сервис, используя Я настраиваю свойства используя

<bean id="propsHolder"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="ignoreResourceNotFound" value="true" />
    <property name="locations">
        <list>
            <value>classpath:/applicationConfig.properties</value>

        </list>
    </property>

</bean>

В моем сервисе Amazon я делаю:

    public class AmazonServiceImpl implements FileStorageService {

    private AmazonS3 amazonClient;
    @Value("${abcxyz}")
    public String bucketName ;

И мой файл props имеет свойство abcxyz = my-bucket

Но это плохо работает со следующим исключением:

 Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: public java.lang.String com.flipswap.service.impl.AmazonServiceImpl.bucketName; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Value(value=${abczyz})}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:285)
    ... 50 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [java.lang.String] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Value(value=${abczyz})}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:924)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:793)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:707)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480)
    ... 52 more


Everyone is able to do this successfully and even i succeeded it in a plain java sample. But running in MVC fails.

Any idea?

Ответы [ 4 ]

0 голосов
/ 19 сентября 2012

Я понял! На самом деле приложение настроило свой собственный контекст XMLWebapplication в web.xml как слушатель загрузчика контекста Spring.

Это не было передачей вызова метода super, который фактически отвечал за регистрацию процессоров аннотаций @Value.

0 голосов
/ 19 февраля 2012

<context:property-placeholder location="classpath:/applicationConfig.properties"/>

вместо.


Убедитесь, что файл конфигурации Spring действительно загружен: добавьте в него некоторую синтаксическую ошибку, если приложение запускается как раньше, проблема в том, что файл используется не так, как ожидалось.

0 голосов
/ 21 февраля 2012

Убедитесь, что ваш компонент PropertyPlaceholderConfigurer объявлен в том же контексте приложения, что и ваш контроллер. BeanFactoryPostProcessors, такие как PPC, не наследуются через границы контекста родительского / дочернего приложения. Возможно, ваш PPC объявлен в контексте «корневого» приложения, но ваша директива сканирования компонентов объявлена ​​в дочернем (диспетчерском сервлете) контексте. Это не сработает и приведет к результатам, о которых вы сообщили.

0 голосов
/ 19 февраля 2012

Это странно. Даже если свойство каким-то образом не загружено, аннотация @Value должна преобразовываться в строку внутри скобок.

Так что попробуйте обновить до 3.1 (который был недавно выпущен) или понизить до 3.0.5 (где я уверен, что это сработало). Также убедитесь, что вы не изменили стратегию автопроводки по умолчанию в xml.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...