我试图通过我自己的类型扩展一个聋人的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?
答案 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
现在举个例子,你提到的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生成器并为自己定义一个类用于你自己的逻辑。