该项目使用Hybris,因此我们只能使用只读类。
问题在于,在一个只读类中,注入的服务之一是私有的,没有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出现了,在该方法中我们尝试调用父方法。发生这种情况时,父母的服务为空。 在构建过程中,两个设置器都将被调用。
自定义类+所有优点:
父班+ NPE:
我尝试从子类和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());
}