很抱歉,此article的副本。我想发表评论,但没有50分的声誉,我无法发表评论,所以...
我有
private boolean stopLoggingIntoDb;
....
public void setStopLoggingIntoDb(String stopLoggingIntoDb) {
this.stopLoggingIntoDb = BooleanUtils.toBoolean(stopLoggingIntoDb.replaceAll("[^A-Za-z]", ""));
logger.warn("Logging into SiebelMethodLogs is " + (!this.stopLoggingIntoDb ? "ON" : "OFF"));
}
和XML
<bean id="siebelMethodProcessor" class="com.entities.utils.Logger">
<property name="logService" ref="logService"/>
<property name="stopLoggingIntoDb" value="${monitor.siebel.stopLogging}"/>
</bean>
在那种情况下,一切正常,但是如果我将setter方法中的属性从stopLoggingIntoDb更改为stopLog并将XML中的属性名称也更改为stopLog,Spring会说无效属性'stopLoggingIntoDb'或Bean属性'stopLog'不是可写的。
因此,我的问题是Spring用setter方法做什么?注入哪个值以及获取注入时正在搜索哪个字段/属性?
最佳答案
如在本示例中的Spring Documentation中所见,name
元素的<property>
属性必须与setter方法匹配。方法参数的名称和字段的名称无关紧要。
依赖注入的示例
以下示例将基于XML的配置元数据用于基于setter的DI。 Spring XML配置文件的一小部分指定了一些bean定义:
<bean id="exampleBean" class="examples.ExampleBean">
<!-- setter injection using the nested ref element -->
<property name="beanOne">
<ref bean="anotherExampleBean"/>
</property>
<!-- setter injection using the neater ref attribute -->
<property name="beanTwo" ref="yetAnotherBean"/>
<property name="integerProperty" value="1"/>
</bean>
<bean id="anotherExampleBean" class="examples.AnotherBean"/>
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/>
public class ExampleBean {
private AnotherBean beanOne;
private YetAnotherBean beanTwo;
private int i;
public void setBeanOne(AnotherBean beanOne) {
this.beanOne = beanOne;
}
public void setBeanTwo(YetAnotherBean beanTwo) {
this.beanTwo = beanTwo;
}
public void setIntegerProperty(int i) {
this.i = i;
}
}
请注意,即使参数名为
name="integerProperty"
并且字段名为setIntegerProperty()
,i
如何与i
方法匹配。