在父类和子类中定义相同属性时的NPE

时间:2019-06-12 07:29:40

标签: java spring dependency-injection

该项目使用Hybris,因此我们只能使用只读类。 diagram

问题在于,在一个只读类中,注入的服务之一是私有的,没有getter方法。 我们将该类扩展到我们的自定义类,而我们碰巧需要相同的服务。

杂种豆定义:

<alias alias="catalogService" name="defaultCatalogService"/>
<bean id="defaultCatalogService" class="de.hybris.platform.catalog.impl.DefaultCatalogService"
      parent="abstractBusinessService">
    <property name="catalogDao" ref="catalogDao"/>
    <property name="catalogVersionService" ref="catalogVersionService"/>
</bean>

自定义bean定义:

<alias name="xxxxxCategoryService" alias="categoryService"/>
<bean id="xxxxxCategoryService" class="hu.xxxxx.core.services.category.xxxxxCategoryServiceImpl"
      parent="defaultCategoryService">
    <property name="rootCategoryCode" ref="rootCategoryCode"/>
    <property name="catalogVersionService" ref="catalogVersionService"></property>
</bean>

当我们调用子方法时,NPE出现了,在该方法中我们尝试调用父方法。发生这种情况时,父母的服务为空。 在构建过程中,两个设置器都将被调用。

自定义类+所有优点: good

父班+ NPE: bad

我尝试从子类和bean-xml中删除该属性,并注释掉依赖于该属性的方法。 这样一来,父类就不会为注入的服务获取null,并且调用也没有任何问题。

现在我不知道null可能来自何处。 我不知道Spring是否由于某种原因无法对同一个bean进行两次连线。

编辑: 当我们尝试在注入的空服务上调用getSessionCatalogVersions()时,会抛出NPE。

private CatalogVersionService catalogVersionService;

...

@Required
public void setCatalogVersionService(final CatalogVersionService catalogVersionService)
{
    this.catalogVersionService = catalogVersionService;
}    

...

private String getCatalogVersionsString()
{
    return CatalogUtils.getCatalogVersionsString(catalogVersionService.getSessionCatalogVersions());
}

0 个答案:

没有答案