java - 在父类和子类中注入相同服务时的 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());
}
解决方案
推荐阅读
- parsing - 我在哪里可以获得 GNU Bison 3.5.4+ 的 Windows 可执行文件?
- c# - 删除列表视图中图像的蓝色背景
- spring-boot - Drools 7 - Timer Cron 无法停止从数据库加载的规则
- ios - setValue(value:forKey:) 在 Firebase Auth 中做了什么?
- javascript - 如何在 JavaScript 中的 Materializecss 中自动调整文本区域的大小
- sql - 在presto sql中使用正则表达式提取=和&之间的文本
- java - 如何在文本文件中写入多个 ArrayList
- android - 如何从一个 RecyclerView 获取数据并在另一个 Activity 的 RecyclerView 中显示
- neo4j - 无法使用 finally_consistent 设置创建全文搜索
- java - 如何解决重复if语句的问题