Необходимо понимать реализацию пользовательских аннотаций для широкополосной коммерции - PullRequest
0 голосов
/ 03 апреля 2020

Я пытался go через код Broadleaf Commerce. Было использовано несколько пользовательских аннотаций, но я не смог найти там процессор. Может ли кто-нибудь помочь мне здесь. Чтобы взять пример @AdminPresentation, это пользовательская аннотация в пакете org.broadleafcommerce.common.presentation;

Однако, как это обрабатывается в приложении, я не смог найти. То, что я понял до сих пор, мы можем использовать Reflection или AOP для его обработки. Но для этого не было ничего.

Пожалуйста, помогите.

Исходный код - https://github.com/BroadleafCommerce/BroadleafCommerce

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020

Для краткого ответа, 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.FieldMetadataProvider, org.broadleafcommerce.openadmin.server.dao.DynamicEntityDaoImpl#fieldMetadataProviders

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

0 голосов
/ 04 апреля 2020

Посмотрите на:

https://www.baeldung.com/java-custom-annotation

Вы получите объяснения по поводу «по умолчанию» в пользовательских аннотациях.

Флоран Coudert.

...