我在这里遇到一个我无法理解的非常具体的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。为什么!?
我该如何纠正呢。
感谢。
答案 0 :(得分:1)
Spring正在AgentServiceImpl中正确设置字段baseDao。父类AbstractCrudServiceImpl中的字段baseDao保持为null。在Java中,您可以覆盖方法,而不是成员变量。尝试AgentServiceImpl.baseDao与AgentServiceImpl.super.baseDao。
答案 1 :(得分:0)
我对Spring知之甚少,所以我不能对注释或任何内容说话,但你原来的属性是private
,所以你不能覆盖它。尝试将两者都更改为protected
。