メカニズム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>
ビーンズのプロパティ
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
cookie
inのセッターをコメントアウトするだけでTestBean
、前述のNotWritablePropertyException
例外が発生します。Bean の自動配線とプロパティの自動配線に違いはありますか?