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

Xml 让默认生成的hybris数据bean扩展自己生成的数据bean,xml,ant,hybris,Xml,Ant,Hybris,我正试图通过自己的类型扩展deafult hybris数据bean。我的代码目前看起来像 <bean class="de.hybris.platform.commercefacades.product.data.MediaData"> <property name="mediaType" type="de.hybris.platform.commercefacades.product.data.MediaDataType"/> </bean&g

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

 <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?

您在这里的配置不正确。我可以引用一个展示bean继承的hybris(v6.1)片段

请查看以下取自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 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"/>

这表明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(层次结构)并相应地引入属性


您能告诉我您正在寻找的确切场景吗。

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

这意味着java类是使用第一个扩展生成的,然后第二个扩展(取决于第一个ext)将其属性添加到现有类中,就是这样。您不能再向类添加“扩展”

总之,如果您想让commercefacade的ImageData扩展您的自定义MediaData,则需要添加commercefacade的extensioninfo.xml
。这样,您的扩展将首先加载

您的自定义扩展中
在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"/>

形象
视频
运行ant clean all,刷新您的平台,您将看到生成的ImageData类将扩展MediaData

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

<bean class="de.hybris.platform.commercefacades.product.data.ImageData">
 <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>

形象
视频

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

为什么不能直接在ImageDatabase中添加mediaType属性,因为我想要一个名为“MediaData”的新超级类型。从这个MediaData中,应该继承两种类型。一个是“ImageData”,另一个是“VideoData”,但问题是,我需要扩展MediaData,我有一个json中的自定义对象数组。我在海布里斯为同样的东西做POJO。它不编译我如何才能做到这一点。