我一直在尝试通过Broadleaf Commerce代码。使用了多个自定义注释,但是我无法在此处找到处理器。有人能帮我一下吗。以@AdminPresentation为例,它是在org.broadleafcommerce.common.presentation包中的自定义注释;

但是,如何在整个应用程序中进行处理,却无法找到。到目前为止,我所了解的我们可以使用反射或AOP进行处理。但是,这没有什么。

请帮忙。

源代码-https://github.com/BroadleafCommerce/BroadleafCommerce

最佳答案

简短的答案是,org.broadleafcommerce.openadmin.server.dao.provider.metadata.BasicFieldMetadataProvider#addMetadata是处理这些注释的地方。

从广义上讲,openadmin中的控制器将使用AdminEntityService获取ClassMetaData(有关如何向管理员用户显示类的所有数据)。 @AdminPresentation注释是此数据的一种来源。方法AdminEntityServiceImpl#getClassMetadata是获取ClassMetaData的主要网关。

#getClassMetadata调用#inspect并最终进入PersistenceManager#inspect。此方法使用DynamicEntityDao最终到达Metadata#getFieldMetadataForTargetClass。该方法通过反射获取类的每个字段,然后通过可用的FieldMetadataProviders处理这些每个字段。 FieldMetadataProviders将java.lang.reflect.Field转换为org.broadleafcommerce.openadmin.dto.FieldMetadata

任何提供的FieldMetadataProvider都可以提供字段元数据。在FormBuilderService中使用此元数据来构造管理页面。

类参考:

AdminEntityService-org.broadleafcommerce.openadmin.server.service.AdminEntityServiceImpl

PersistenceManager-org.broadleafcommerce.openadmin.server.service.persistence.PersistenceManagerImpl#inspect

DynamicEntityDao-org.broadleafcommerce.openadmin.server.dao.DynamicEntityDaoImpl#getPropertiesForEntityClass

元数据-org.broadleafcommerce.openadmin.server.dao.Metadata#getFieldMetadataForTargetClass

FieldMetadataProvider-org.broadleafcommerce.openadmin.server.dao.provider.metadata.FieldMetadataProviderorg.broadleafcommerce.openadmin.server.dao.DynamicEntityDaoImpl#fieldMetadataProviders

FormBuilderService-org.broadleafcommerce.openadmin.web.service.FormBuilderServiceImpl

09-26 11:36