我正在尝试使用机制protected
String
在注释配置的 bean 中设置字段的值。property-override
除非我为 bean 中的字段添加设置器,否则它会引发以下异常。
org.springframework.beans.NotWritablePropertyException: Invalid property 'cookie' of bean class [com.test.TestBean]: Bean property 'cookie' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
为了比较,我还有另一个protected
属于另一个类的字段。另一个类的 Bean 是在 XML 中定义的。该字段已正确自动装配。
这是第一个豆子
@Component("testBean")
public class TestBean {
protected @Autowired(required=false) String cookie;
protected @Autowired InnerBean innerBean;
public String getCookie() {
return cookie;
}
public void setCookie(String cookie) {
this.cookie = cookie;
}
public InnerBean getInnerBean() {
return innerBean;
}
}
这里是InnerBean
public class InnerBean {
private String value;
public void setValue(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
Spring 配置文件 - 只有有趣的部分
<context:property-override location="beans.properties"/>
<context:component-scan base-package="com.test"></context:component-scan>
<context:annotation-config></context:annotation-config>
<bean id="innerBean" class="com.test.InnerBean">
<property name="value">
<value>Inner bean</value>
</property>
</bean>
bean.properties
testBean.cookie=Hello Injected World
主要的
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("test.xml");
TestBean bean = context.getBean(TestBean.class);
System.out.println("Cookie : " + bean.getCookie());
System.out.println("Inner bean value : " + bean.getInnerBean().getValue());
}
输出
Cookie : Hello Injected World
Inner bean value : Inner bean
如果我只是注释掉 in 的设置器cookie
,TestBean
我会得到提到的NotWritablePropertyException
异常。自动装配 bean 和自动装配属性之间有区别吗?