Почему Autowiring не работает для этого свойства bean-компонента Spring MVC? - PullRequest
2 голосов
/ 08 июля 2011
@Autowired
private String defaultLanguage;

Когда я пытаюсь @Autowire поле defaultLanguage класса CountryBean следующим образом:

<beans:bean id="countryBean" class="geoapp.CountryBean">
    <beans:property name="defaultLanguage" value="English" />
</beans:bean>

Я получаю эту ошибку:

Error creating bean with name 'CountryBean': 
Injection of autowired dependencies failed; 
nested exception is 
org.springframework.beans.factory.BeanCreationException: 
Could not autowire field: 
private java.lang.String geoapp.CountryBean.defaultLanguage; 
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.Autowired(required=true)}:

Когда он говорит No matching bean of type [java.lang.String] found for dependency, мне интересно, есть ли что-то еще, что я должен сказать, чтобы сообщить ему, что значение English является String?

Ответы [ 5 ]

2 голосов
/ 08 июля 2011

Поскольку вы явно указываете значение свойства через xml, нет необходимости иметь аннотацию AutoWired.

1 голос
/ 08 июля 2011

Вы не используете функцию автоматического подключения.Вы можете либо:

  • Использовать <beans:property ... /> в XML и добавить установщик для свойства в классе
  • Использовать аннотацию @Autowired, которая автоматически просматривается в контексте Springдля существующего компонента, который имеет вашу собственность class (в вашем случае, String)
0 голосов
/ 25 января 2015

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

0 голосов
/ 08 июля 2011

Еще один «другие ответы верны», но вот еще один лакомый кусочек для вас - Spring автоматически установит перечисления для вас, поэтому, если у вас было перечисление языков и у вашего определения бина было что-то вроде «, вы получите здесь есть безопасное перечисление типов вместо String.

0 голосов
/ 08 июля 2011

Другие ответы верны, но, чтобы прояснить ситуацию, эти bean-компоненты, определенные в файлах * .xml, обрабатываются до обработки любых аннотаций типа @. Итак, для вашего примера, bean-компонент «CountryBean» обрабатывается до того, как обрабатывается свойство «defaultLanguage», оставляя зависимость null.

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