繁体   English   中英

为什么没有设置 autowire setter 值?

[英]why is autowire setter value not set?

我有一堂这样的课

public class ServiceImpl {
private boolean required = false;

public ServiceImpl (Log log) {
    this.db = Registry.getDatabase(this);
    this.log = log;
    rt = new Table(log, db);
    it = new ItemTable(log, db, rt);
    gt = new GroupTable(log, db);
}

public ServiceImpl () {
      this.db = Registry.getDatabase(this);
      log = Registry.getLog(this);
      rt = new Table(log, db);
      it = new ItemTable(log, db, rt);
      gt = new GroupTable(log, db);
}
public void trySomething(Collection someList, int value) {
     for(int i=0; true; i++){
        try{
          doSomething(someList,value);
          return;
        } catch (..) {
        ...
        }
     }
}

public void doSomething(Collection someList, int someValue) {
...
    //sysout(required) - prints false (expected to be true...)
    if(!required) { 
         execute A
    } else {
         execute B
    }
...
}

public setRequired(boolean required){
    this.required = required
    //sysout(required) - prints true
}

二级(上一级)

abstract class Synch {
...
private ServiceImpl service;
protected synch(Log log, ServiceImpl service, Keys key) {
this.log = log;
this.key = key;
this.service = service;
}
....
void execute(){
try{
service.trySomething(someList,someValue);
}..

protected abstract void service() throws LockException(){
return service;
}
....

对于我的 xml

...
<bean id="service" class="com.ort.ets.ServiceImpl">
     <property name="required" value="true" />
</bean>
...

很抱歉问一些事情是否很明显,但我已经坚持了几个小时。 有人可以告诉我为什么当我期望它是真的时要求是假的吗?

编辑:构造函数和方法调用层次结构

编辑:系统输出结果:

真的

错误的

在您的班级中进行以下更改

public class ServiceImpl {
    private Boolean required = false;

    public void doSomething(Collection someList, int someValue) {
        ...
        //sysout(required) - prints false (expected to be true...)
        if(!required) { 
             execute A
        } else {
             execute B
        }
        ...
    }

    public void setRequired(Boolean required){
        this.required = required
        //sysout(required) - prints true
    }
}

同样在 xml 文件中进行以下更改

<bean id="service" class="com.ort.ets.ServiceImpl">
    <property name="required" value="true" />
</bean>

应该

<bean id="service" class="com.ort.ets.ServiceImpl">
    <property name="required">
        <value type="java.lang.Boolean">true</value>
    </property>
</bean>

boolean必须替换为对象类型类( java.lang.Boolean

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM