首页 > 解决方案 > 在父类和子类中注入相同服务时的 NPE

问题描述

该项目使用 Hybris,因此我们的业务逻辑建立在 OOTB 只读类之上。 图表

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

Hybris bean 定义:

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

自定义bean定义:

<alias name="customCategoryService" alias="categoryService"/>
<bean id="customCategoryService" class="core.services.category.customCategoryServiceImpl"
      parent="defaultCategoryService">
    <property name="catalogVersionService" ref="catalogVersionService"/>
</bean>

NPE 在我们调用子方法时出现,我们在其中尝试调用父方法。发生这种情况时,父级的服务为空。在构建期间,两个 setter 都会被调用。

我尝试从子类和 beans-xml 中删除该属性,并注释掉依赖它的方法。通过这样做,父类没有为注入的服务获取 null,并且调用运行没有任何问题。

现在我不知道 null 可能来自哪里。我想知道是否由于某种原因 Spring 不能两次连接同一个 bean。

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

private CatalogVersionService catalogVersionService;

...

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

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

标签: javaspringdependency-injection

解决方案


推荐阅读