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

给出以下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" 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();
    }

    ...
}