很抱歉,此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方法匹配。

10-02 21:35