Spring:将@Autowired应用于属性以消除setter
Spring: apply @Autowired to property to eliminate setter
我对应用于 bean 的 属性 的 @Autowired 注释的理解是,通过这样做我们可以消除 setter 方法。当我们选择基于注释的配置时,这似乎是有效的:我们只是创建一个用 @Component 注释的 bean,并将 @Autowired 注释到它感兴趣的属性。
然而,当我使用基于 xml 的配置测试这个想法时,我没有做同样的事情。
这是我放入 bean 中的内容 class:
@Autowired
private String message2;
public String getMessage2() {
return message2;
}
在 xml 文件中:
<bean id="testBean" class="TestBean">
<property name="message2" value="Hello world!"/>
</bean>
IDE 抱怨 "can't resolve the property" 编译失败。也许使用带有 xml 配置的 @Autowired 是一种不被允许的奇怪联姻?
有人愿意帮助我解决这个可能很愚蠢的问题吗?
如果您不想要 setter,则删除 TestBean
bean 定义中的 <property>
元素。 property
要求 setter 可用于设置 属性。因为它丢失了,如果你真的尝试加载 XML 配置,例如 ClassPathXmlApplicationContext
,你会得到这个错误
Caused by: org.springframework.beans.NotWritablePropertyException
: Invalid property message2
of bean class [org.example.TestBean
]: Bean property message2
is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
删除<property>
后,声明一个合适的bean来注入
<bean id="message2" class="java.lang.String">
<constructor-arg value="Helllo world!"/>
</bean>
您还需要
<context:annotation-config />
注册处理@Autowired
的AutowiredAnnotationBeanPostProcessor
。
请注意,声明一个 String
bean 很尴尬。您最好使用 <property>
或某些 属性 解析机制,从配置文件中提取值并通过 @Value
注释字段分配它。
@Value("${config.message2}")
private String message2;
我对应用于 bean 的 属性 的 @Autowired 注释的理解是,通过这样做我们可以消除 setter 方法。当我们选择基于注释的配置时,这似乎是有效的:我们只是创建一个用 @Component 注释的 bean,并将 @Autowired 注释到它感兴趣的属性。
然而,当我使用基于 xml 的配置测试这个想法时,我没有做同样的事情。
这是我放入 bean 中的内容 class:
@Autowired
private String message2;
public String getMessage2() {
return message2;
}
在 xml 文件中:
<bean id="testBean" class="TestBean">
<property name="message2" value="Hello world!"/>
</bean>
IDE 抱怨 "can't resolve the property" 编译失败。也许使用带有 xml 配置的 @Autowired 是一种不被允许的奇怪联姻?
有人愿意帮助我解决这个可能很愚蠢的问题吗?
如果您不想要 setter,则删除 TestBean
bean 定义中的 <property>
元素。 property
要求 setter 可用于设置 属性。因为它丢失了,如果你真的尝试加载 XML 配置,例如 ClassPathXmlApplicationContext
,你会得到这个错误
Caused by:
org.springframework.beans.NotWritablePropertyException
: Invalid propertymessage2
of bean class [org.example.TestBean
]: Bean propertymessage2
is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
删除<property>
后,声明一个合适的bean来注入
<bean id="message2" class="java.lang.String">
<constructor-arg value="Helllo world!"/>
</bean>
您还需要
<context:annotation-config />
注册处理@Autowired
的AutowiredAnnotationBeanPostProcessor
。
请注意,声明一个 String
bean 很尴尬。您最好使用 <property>
或某些 属性 解析机制,从配置文件中提取值并通过 @Value
注释字段分配它。
@Value("${config.message2}")
private String message2;