2014-10-14 2 views
0

Учитывая этот XML-код Spring ниже:Весна - класс Child свойство не установлено при введении через родителя

<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" /> 

и это Java код:

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(); 
    } 

    ... 
} 

У меня есть свойство, что я хотел бы inject (engineFacade) в дочернем классе (childCarFacade), который потенциально может быть введен для других детей родительского класса (BaseCarFacade). Вместо избыточности этого свойства во всех дочерних классах я надеялся иметь его на родительском уровне, а затем просто использовал его в любом из дочерних элементов, как показано выше, где я вызываю «doSomethingReallySpecial()».

Однако всякий раз, когда я выполняю этот код я получаю во время выполнения исключения нулевого указателя, который выглядит следующим образом:

причиненное: java.lang.NullPointerException на com.foo.EngineFacade.doSomethingReallySpecial (EngineFacade .java: 48)

Вот строка из конкретизации моих бобов:

Pre-инстанцирует одиночек в org.springframework.beans.[email protected]: определяющие бобы [winkInternalLifecycleManager, winkInternalLifecycleManagersRegistry, winkInternalRegistryPostProcessor, winkInternalLifecycleManagerPostProcessor, winkInternalDependenciesInjectionPostProcessor, winkInternalDeploymentConfiguration, winkInternalRequestProcessorBuilder, winkInternalDefaultPropertiesFactory, winkInternalPropertiesFactory, winkInternalPropertyPlaceholderConfigurer, winkInternalNullContant, org.springframework.context.annotation. internalConfigurationAnnotationProcessor, org.springframework.context.annotation.internalAutowiredAnnotationProcessor, org.springframework.context.annotation.internalRequiredAnnotationProcessor, org.springframework.context.annotation.internalCommonAnnotationProcessor, org.apache.wink.spring.Registrar # 0, jaxbProvider, jacksonObjectMapper, jacksonAnnotationIntrospector, primaryAnnotation Introspector, 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 ...

Вы можете увидеть последние, кажется, правильно созданный.

Может ли кто-нибудь указать на ошибку моих путей? Я чувствую, что это должно быть просто ...

+0

Можете ли вы разместить любой из журналов Spring? На первый взгляд, ваш XML-код выглядит корректно. –

+0

Спасибо за ваш ответ. Я не уверен, что добавить ... нет других ошибок. Однако я добавил строку запуска экземпляров компонента (см. Выше). Они выглядят правильно. – risingTide

+0

У мальчика есть яйцо на моем лице ... см. Ниже. – risingTide

ответ

1

Ну, это очень неловко, но, как оказалось, я выглядел слишком глубоко в Исключении нулевого указателя. По существу, был NPE в методе doSomethingReallySpecial(), а не внутри engineFacade. Двигатель Facade устанавливался правильно все время. Это означает, что исходный код, который я написал выше (как упоминал Эрик Б), действительно работает правильно.

Приносим извинения за отсутствие чего-то такого простого; надеюсь, в конце концов кто-то еще найдет этот вопрос полезным, тем не менее.

Спасибо за помощь Эрик. B и user1030367!

1

Возможно, попытайтесь разоблачить геттер в родительском и getEngineFacade(). DoSomethingReallySpecial()?

+0

Хм ... это действительно действительно хорошая идея, но я попробовал, и это не сработало. Я все еще получаю NPE. – risingTide

+0

У мальчика есть яйцо на моем лице ... см. Ниже. Спасибо за предложение! – risingTide

Смежные вопросы