在java中重写的抽象类属性导致null

时间:2013-10-20 21:55:49

标签: java spring dependency-injection dependency-properties

我在这里遇到一个我无法理解的非常具体的Java Spring问题。 我创建了一个抽象类,f.e:

public abstract class AbstractCrudServiceImpl{

    private GenericDAO baseDao;

    public GenericDAO getBaseDao() {
     return baseDao;
    } 
}

Generic Dao是一个界面。我想在抽象类中使用getter(和setter),因此实现将非常简单明了。 [如果不是atm则无所谓]。

然后有它的实现,例如:

public class AgentServiceImpl extends AbstractCrudServiceImpl{

    @Autowired
    private AgentDao baseDao;
}

使用超类的getter来运行所有方法。

我的目的是产生类似的效果,就像我使用XML一样:

<bean id="AbstractCrudServiceImpl" class="..." abstract="true" />

<bean id="AgentServiceImpl" parent="AbstractCrudServiceImpl">
    <property name="baseDao" ref="agentDao"/>
</bean>

令我惊讶的是我收到了一个错误说:

java.lang.NullPointerException
 com.insurance.central.services.impl.AbstractCrudServiceImpl.read(AbstractCrudServiceImpl.java:36)

这基本上意味着,属性设置不正确,因为它的值仍为null。为什么!?

我该如何纠正呢。

感谢。

2 个答案:

答案 0 :(得分:1)

Spring正在AgentServiceImpl中正确设置字段baseDao。父类AbstractCrudServiceImpl中的字段baseDao保持为null。在Java中,您可以覆盖方法,而不是成员变量。尝试AgentServiceImpl.baseDao与AgentServiceImpl.super.baseDao。

答案 1 :(得分:0)

我对Spring知之甚少,所以我不能对注释或任何内容说话,但你原来的属性是private,所以你不能覆盖它。尝试将两者都更改为protected