我一直在尝试浏览 Broadleaf Commerce 的代码。使用了多个自定义注释,但我无法找到那里的处理器。有人能帮我一下吗。以 @AdminPresentation 为例,它是包 org.broadleafcommerce.common.presentation 中的自定义注释;
但是,我无法找到整个应用程序如何处理它。到目前为止我所了解的我们可以使用Reflection或AOP对其进行处理。但没有什么可做的。
请帮忙。
源代码 - https://github.com/BroadleafCommerce/BroadleafCommerce
最佳答案
简单来说,org.broadleafcommerce.openadmin.server.dao.provider.metadata.BasicFieldMetadataProvider#addMetadata
是处理这些注释的地方。
在更广泛的层面上,openadmin 中的 Controller 将使用 AdminEntityService 来获取 ClassMetaData(有关如何向管理员用户显示类的所有数据)。 @AdminPresentation
注释是此数据的来源之一。方法 AdminEntityServiceImpl#getClassMetadata
是获取 ClassMetaData 的主要网关。
#getClassMetadata
调用 #inspect
并最终到达 PersistenceManager#inspect
。此方法使用 DynamicEntityDao 最终到达 Metadata#getFieldMetadataForTargetClass
。该方法通过反射获取类的每个字段,然后通过可用的 FieldMetadataProvider 处理每个字段。 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.FieldMetadataProvider
,org.broadleafcommerce.openadmin.server.dao.DynamicEntityDaoImpl#fieldMetadataProviders
FormBuilderService - org.broadleafcommerce.openadmin.web.service.FormBuilderServiceImpl
关于java - 需要了解阔叶商务自定义注释实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61005608/