1

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

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)

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

我该如何纠正它。

谢谢。

4

2 回答 2

1

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

于 2013-10-20T22:22:21.567 回答
0

我对 Spring 了解不多,所以我不能谈论注释或任何东西,但你的原始属性是private,所以你不能覆盖它。尝试将两者都更改为protected.

于 2013-10-20T22:01:23.657 回答