简而言之,org.broadleafcommerce.openadmin.server.dao.provider.metadata.BasicFieldMetadataProvider#addMetadata 是处理这些注释的地方。
在更广泛的层面上,openadmin 中的控制器将使用 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