@Autowired
private String defaultLanguage;
当我尝试@Autowire
时,CountryBean
类的defaultLanguage
字段如下:
<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
?
由于您是通过xml显式指定属性值,因此不需要AutoWired注释。
您没有正确使用自动连接功能。
- 在XML中使用
<beans:property ... />
并在类 中为属性添加setter - 使用
@Autowired
注释,自动在Spring上下文中查找具有您的属性类(在您的示例中为String
) 的现有bean。
其他答案都是正确的,但是要澄清一点,要在处理任何@类型注释之前处理*.xml文件中定义的那些bean。因此,对于您的示例,在处理属性"defaultLanguage"之前处理bean"CountryBean",使依赖项为空。
又是一个'其他答案是正确的',但这里有另一个花语给你——Spring会自动为你设置枚举,所以如果你有一个语言的枚举,你的bean定义有类似的东西,你会得到一个类型安全的枚举在那里,而不是一个字符串。
如果您想自动装配您的属性,您需要为defaultLanguage String创建一个新的bean。然后将bean的名称与字段的名称相等。