Spring-通过父类注入时未设置子类属性
给出以下XML Spring代码:Spring-通过父类注入时未设置子类属性,spring,inheritance,subclass,parent,Spring,Inheritance,Subclass,Parent,给出以下XML Spring代码: <bean id="baseCarFacade" class="com.foo.BaseCarFacade"> <property name="engineFacade" ref="engineFacade" /> </bean> <bean id="engineFacade" class="com.foo.EngineFacade" /> <bean id="childCarFacade" c
<bean id="baseCarFacade" class="com.foo.BaseCarFacade">
<property name="engineFacade" ref="engineFacade" />
</bean>
<bean id="engineFacade" class="com.foo.EngineFacade" />
<bean id="childCarFacade" class="com.foo.ChildCarFacade" parent="baseCarFacade" />
我想在子类(childCarFacade)中注入一个属性(engineFacade),该属性可能会被注入父类(BaseCarFacade)的其他子类。我不希望在所有子类中都冗余使用这个属性,而是希望在父级使用它,然后在上面所示的任何子类中使用它,我称之为“doSomethingReallySpecial()”
但是,每当我执行此代码时,我都会得到一个运行时空指针异常,如下所示:
原因:java.lang.NullPointerException位于
com.foo.EngineFacade.doSomethingReallySpecial(EngineFacade.java:48)
下面是我的bean实例化中的一行:
在中预实例化单例
org.springframework.beans.factory.support。DefaultListableBeanFactory@32273227:
定义bean
[winkInternalLifecycleManager,winkInternalLifecycleManagersRegistry,winkInternalRegistryPostProcessor,winkInternalLifecycleManagerPostProcessor,WinkInternalDeployment配置,winkInternalRequestProcessorBuilder,WinkInternalDefaultProperties工厂,WinkInternalProperties工厂,WinkInternalProperties工厂,WinkInternalProperties工厂YPlaceHolderConfiguration,winkInternalNullContant,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.InternalCommonAnnotationProcessorr、 org.apache.wink.spring.registrator#0,jaxbProvider,jacksonObjectMapper,jacksonAnnotationIntrospector,primaryAnnotationIntrospector,secondaryAnnotationIntrospector,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,PropertyPlaceholderConfigurer,allProperties,dataSource,dynacache,commonCache,transactionManager,org.springframework、 aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,jdbcTemplate,baseCarFacade,engineFacade,childCarFacade
您可以看到最后一个示例似乎已正确实例化
有人能指出我的错误吗?我觉得这应该很简单…也许可以尝试在父级和getEngineFacade()中公开一个getter?嗯,这非常令人尴尬,但事实证明,我对空指针异常的关注程度太深了。实际上,dosomethinallyspecial()中有一个NPE方法,而不是在engineFacade中。engineFacade一直被正确设置。这意味着我上面发布的原始代码(如Eric.B所述)确实工作正常 我很抱歉遗漏了这么简单的问题;希望最终其他人会觉得这个问题很有帮助
谢谢你的帮助Eric.B和user1030367!你能发布任何Spring日志吗?乍一看,你的XML配置看起来是正确的。谢谢你的回答。我不确定要添加什么…没有其他错误。不过,我确实添加了上面bean实例化的启动行(见上文)他们看起来对我来说是正确的。男孩脸上有蛋…请看下面。嗯…这听起来确实是个好主意,但我尝试了,但没有成功。我仍然得到NPE。男孩脸上有蛋…请看下面。不过谢谢你的建议!
public class BaseCarFacade implements IBaseMemberFacade {
public void setEngineFacade(EngineFacade engineFacade) {
this.engineFacade = engineFacade;
}
...
}
public class EngineFacade {
...
}
public class ChildCarFacade extends BaseCarFacade {
public void doSomethingSpecial() {
someObject = engineFacade.doSomethingReallySpecial();
}
...
}