[英]Abstract class property overriding in java results in null
我在这里遇到一个我无法理解的非常具体的Java Spring问题。 我创建了一个抽象类fe:
public abstract class AbstractCrudServiceImpl{
private GenericDAO baseDao;
public GenericDAO getBaseDao() {
return baseDao;
}
}
通用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。 为什么!?
我应该如何纠正。
谢谢。
Spring在AgentServiceImpl中正确设置了字段baseDao。 父类AbstractCrudServiceImpl中的baseDao字段保持为空。 在Java中,您可以覆盖方法,而不是成员变量。 尝试使用AgentServiceImpl.baseDao与AgentServiceImpl.super.baseDao。
我对Spring不太了解,所以我无法与注解或其他任何内容交流,但是您的原始属性是private
,因此您无法覆盖它。 尝试将两者都更改为protected
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.