让默认生成的hybris数据bean扩展自己生成的数据bean

时间:2016-11-02 08:51:58

标签: xml ant hybris

我试图通过我自己的类型扩展一个聋人的hybris数据bean。我的代码目前看起来像

Dispose()

这里的问题是生成的ImageData对象不会扩展MediaData。生成的代码如下所示:

 <bean class="de.hybris.platform.commercefacades.product.data.MediaData">
     <property name="mediaType" type="de.hybris.platform.commercefacades.product.data.MediaDataType"/>
     </bean>

     <enum class="de.hybris.platform.commercefacades.product.data.MediaDataType">
         <value>IMAGE</value>
         <value>VIDEO</value>
     </enum>

     <bean class="de.hybris.platform.commercefacades.product.data.ImageData"
           extends="de.hybris.platform.commercefacades.product.data.MediaData"/>

这是定义新数据对象的唯一方法,还是可以覆盖默认的hybris数据bean?

2 个答案:

答案 0 :(得分:1)

您在此处执行的配置不正确。正如我可以引用一个hybris(v6.1)片段,它展示了bean的继承。

请查看以下从acceleratorfacades-beans.xml

获取的代码段
<bean class="de.hybris.platform.acceleratorfacades.payment.data.PaymentSubscriptionResultData" 
   extends="de.hybris.platform.acceleratorservices.payment.data.PaymentSubscriptionResult">
    <property name="storedCard" type="de.hybris.platform.commercefacades.order.data.CCPaymentInfoData"/>
</bean>

这表明bean PaymentSubscriptionResultData扩展了PaymentSubscriptionResult。

现在,如果您去查看de.hybris.platform.acceleratorfacades.payment.data.PaymentSubscriptionResultData,它实际上会延伸de.hybris.platform.acceleratorservices.payment.data.PaymentSubscriptionResult

enter image description here

现在举个例子,你提到的bean为

de.hybris.platform.commercefacades.product.data.ImageData已作为hybris预定义bean存在。 您不能使用任何其他基本bean(类)扩展该bean,因为首先生成基本扩展bean。依赖关系在自定义扩展中计算,并且(已生成的)基本bean提供扩展属性,而不是创建新的bean。

如果您想要自定义任何预定义的bean,那么您必须创建自己的bean(层次结构)并相应地引入属性。

请您告诉我您正在寻找的具体情况。

答案 1 :(得分:1)

您可以跨不同的扩展名定义单个bean或枚举。构建平台时,只生成一个具有所有属性的合并列表的Java类。根据扩展依赖项合并Bean。

这意味着java类是使用第一个扩展生成的,然后第二个(取决于第一个ext)将它的属性添加到现有类中,就是这样。你不能再在课堂上添加“延伸”了。

总而言之,如果你想让来自commercefacade的ImageData扩展你的自定义MediaData,你需要在commercefacade的extensioninfo.xml中添加 <requires-extension name="your_custom_extension"/>。这样您的扩展程序将首先加载。

在beans.xml <{1}}中定义

your_custom_extension

运行ant clean all,刷新你的平台,你会发现生成的ImageData类将扩展MediaData。

当然不鼓励修改hybris扩展的依赖性。你不应该修改它们。相反,只需将现有bean所需的属性添加到现有bean中即可。在自定义扩展中,在beans.xml中定义它:

<bean class="de.hybris.platform.commercefacades.product.data.MediaData">
 <property name="mediaType" type="de.hybris.platform.commercefacades.product.data.MediaDataType"/>
 </bean>

 <enum class="de.hybris.platform.commercefacades.product.data.MediaDataType">
     <value>IMAGE</value>
     <value>VIDEO</value>
 </enum>
<bean class="de.hybris.platform.commercefacades.product.data.ImageData"
       extends="de.hybris.platform.commercefacades.product.data.MediaData"/>

如果你真的需要一个扩展MediaData的ImageData类,那么最好的解决方案就是不要使用Hybris bean生成器并为自己定义一个类用于你自己的逻辑。