JavaRush /Java-Blog /Random-DE /Erstellen Sie Ihre eigenen Anmerkungen in Java
angelina
Level 5

Erstellen Sie Ihre eigenen Anmerkungen in Java

Veröffentlicht in der Gruppe Random-DE
Artikel von Jonny Hackett, 14. Juli 2014, 11:09 Uhr Wenn Sie in Java programmieren und eines der gängigen Frameworks wie Spring und Hibernate verwenden , sind Sie bereits mit der Verwendung von Annotationen vertraut. Bei der Arbeit mit einem bestehenden Framework reichen interne Annotationen völlig aus. Was aber, wenn Sie Ihre eigenen Anmerkungen erstellen müssen? Vor nicht allzu langer Zeit hatte ich einen Grund, meine eigenen Anmerkungen für ein Projekt zu erstellen, das die Bestätigung gemeinsamer Informationen aus mehreren Datenbanken erforderte. Szenario: Ein Unternehmen verfügt über mehrere Datenbanken, in denen dieselben Informationen gespeichert und die Daten auf unterschiedliche Weise aktualisiert werden. Es war geplant, die Daten in einer Masterdatenbank zusammenzufassen, um die Probleme zu beseitigen, die mit der Beschaffung von Daten aus verschiedenen Quellen verbunden sind. Vor Beginn des Projekts musste jedoch festgestellt werden, wie asynchron die Daten waren, und die erforderlichen Änderungen vorgenommen werden. Der erste Schritt bestand darin, einen Bericht zu erstellen, der dieselben Daten in verschiedenen Datenbanken anzeigt und die Werte bestätigt oder die Datensätze hervorhebt, die nicht übereinstimmen, basierend auf festgelegten Abgleichsregeln. Nachfolgend finden Sie einen Auszug der wesentlichen Anforderungen zum Zeitpunkt des Projekts: • Vergleichen Sie Daten in mehreren Datenbanken, um dieselben Daten zu finden, beispielsweise Kundenname, Firmenname oder Verzeichnisinformationen. • Standardmäßig sollte der Wert je nach Datentyp in allen Datenbanken genau gleich sein. • Für einige Felder wollten wir nur anzeigen, dass der Wert gefunden wurde, der Wert wurde jedoch nicht verglichen. • Bei anderen Feldern wollten wir lediglich den Wert mit dem Gefundenen vergleichen und die Daten mit den Daten aus der angegebenen Quelle bestätigen. • Für das dritte Feld wollten wir einen komplexen Datenvergleich durchführen, der auf dem Wert anderer Felder im Datensatz basiert. • Für den vierten Feldtyp wollten wir die Daten formatieren, beispielsweise im Währungsformat 000.000,00 $. • Der Bericht musste im MS Excel-Format vorliegen, jede Zeile sollte einen Wert aus einer separaten Quelle enthalten. Jede Zeile, deren Wert nicht mit den Datenbestätigungsbedingungen übereinstimmt, sollte gelb hervorgehoben werden. Аннотации После того, Wie мы прочитали требования и озвучoder несколько разных идей воплощения того, что требуется, я решил использовать аннотации, которые запустят конфигурацию сравнения данных и процесс отчета. Нам требовалось просто, но гибкое и расширяемое решение. Эти аннотации будут на уровне поля и мне понравилось то, что конфигурацию не будет скрыта в файле, где-нибудь в пути класса. Вместо этого я смогу видеть аннотации ассоциированные с полем, чтобы точно знать Wie оно будет обработано. Проще говоря - Anmerkung будет ничем иным Wie маркером, метаданные которая будет предоставлять информацию, но не будет напрямую воздействовать на работу самого Codeа. Если вы уже программировали на Java, то вам должно быть знакомо использования Anmerkung, но возможно вам никогда не требовалось создавать свои собственные. Для этого вам нужно создать новый тип, который использует Java тип @interface, который будет содержать элементы, которые в свою очередь определяют детали метаданных. Вот пример проекта: 1@Target(ElementType.FIELD) 2@Retention(RetentionPolicy.RUNTIME) 3public @interface ReconField { 4 5 /** 6 * Значение, которое определяет из Wieого источника сравниваются данные, oder будет использоваться для 7 отображения значения oder для ссылки на правило. 8 * 9 * @return Значение, если источники должны быть сравнены, по умолчанию true. 10 */ 11 boolean compareSources() default true; 12 13 /** 14 * Значение показывает формат, который используется для отображения значения в отчете. 15 * 16 * @return Установленный формам, по умолчанию native. 17 */ 18 ReconDisplayFormat displayFormat() default ReconDisplayFormat.NATIVE; 19 20 /** 21 * Значение, показывающее Bedeutung ID используемого поля для одинаковых значений из источника до поля. 22 * 23 * @return ID поля. 24 */ 25 String id(); 26 27 /** 28 * Значение, показывающее ярлык, который будет отображается в отчете для поля. 29 * 30 * @return Значение ярлыка, по умолчанию пустая строка. 31 */ 32 String label() default ""; 33 34 /** 35 * Значение, показывающее источник, который должен быть сравнен на предмет различий. 36 * 37 * @return Список источников для сравнения. 38 */ 39 ReconSource[] sourcesToCompare() default {}; 40 } Это основная Anmerkung, с помощью которой запуститься процесс сравнения данных. Она содержит основные требуемые элементы, в соответствии с требованиями, для сравнения данных из различных источников данных. @ReconField должна справиться с большинством того, что нам требуется, за исключением более сложных сравнений данных, о которых мы поговорим позже. Большинство из этих элементов объяснены комментариями в Codeе. Не смотря на это пара основных аннотаций в нашей @ReconField должны быть объяснены отдельно. • @Target – Эта Anmerkung позволит вам указать те java элементы, к которой Anmerkung должна быть применена. Возможные типы для применения такие: ANNOTATION_TYPE, CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER и TYPE. В нашей @ReconField Anmerkung для уровня FIELD. • @Retention – Эта Anmerkung позволит вам указать, когда Anmerkung будет доступна. Возможные значения: CLASS, RUNTIME и SOURCE. Так Wie мы будет обрабатывать аннотации в RUNTIME, мы должны установить эти значения. Процесс подтверждения данных будет идти в один Anfrage к каждой базе данных, и затем отобразит результаты в общих данных, которые представляют собой все поля для определенного типа записи. Аннотация для каждого поля в общих данных сообщит процессору Wie совершать сравнение данных для этого определенного поля, а так же Bedeutung, найденное в каждой базе данных. Давайте посмотрим на несколько примеров того, Wie эти аннотации могу быть использованы для различных конфигураций сравнения данных. Wasбы подтвердить, что Bedeutung существует и точно соответствует в каждом источнике данных, вам всего лишь надо предоставить ID поля и ярлык, который будет отображаться в поле отчета. 1 @ReconField(id = CUSTOMER_ID, label = "Customer ID") 2 private String customerId; Wasбы отобразить найденные значения из каждого источника данных, но делать сравнения данных, вам нужно указать элемент compareSources и поставить Bedeutung на false. 1 @ReconField(id = NAME, label = "NAME", compareSources = false) 2 private String name; Wasбы подтвердить, что Bedeutung найдено в определенном источник данных, но не во всех, вам нужно использовать элемент sourcesToCompare. Это отобразить все найденные значения, но сравнение любых данных в источниках данных произойдет в соответствии со списком элементов. Это для случая, если некоторые данные не сохранены во всех источниках данных. ReconSource - это enum, в котором источники данных доступны для сравнения. 1 @ReconField(id = PRIVATE_PLACEMENT_FLAG, label = "PRIVATE PLACEMENT FLAG", sourcesToCompare ={ 2 ReconSource.LEGACY, ReconSource.PACE }) private String privatePlacementFlag; Теперь, когда мы выполнoder основные требования, нам нужно выполнить сравнение более сложных данных, которые специфичный для поля. Wasбы сделать это мы создадим вторую аннотацию, которая запустит обработку правил. 1 @Target(ElementType.FIELD) 2 @Retention(RetentionPolicy.RUNTIME) 3 public @interface ReconCustomRule { 4 5 /** 6 * Значение, указывающее используемые параметры, прописанные обработчику правила, Bedeutung по умолчанию - 7 отсутствие параметров. 8 * 9 * @return The String[] параметры, прописанные обработчику правила 10 */ 11 String[] params() default {}; 12 13 /** 14 * Значение, указывающее класс обработчика правила, которое используется для сравнения значений из 15 каждого источника данных. 16 * 17 * @return Класс обработчика правила 18 */ 19 Class processor() default DefaultReconRule.class; 20 } Очень похоже на предыдущую аннотацию, одна большая разница в том, что в @ReconCustomRule мы указываем класс, которые запустит сравнение данных, когда запускается процесс recon. Вы можете указать только класс, который будет использован, чтобы ваш обработчик приписал Bedeutung и инициализировал любой класс, который вы укажите. Указанный класс в данной аннотации, будет использовать интерфейс правила, который в свою очередь будет использован обработчиком для исполнения правила. Давайте посмотрим пару примеров данной аннотации. В этом примере мы используем правило, которое проверит обмен валюты не в США и в этом случае пропустит сравнение данных. Wasбы сделать это, нам надо проверить поле страны в той же записи. 1 @ReconField(id = STREET_CUSIP, label = "STREET CUSIP", compareSources = false) 2 @ReconCustomRule(processor = SkipNonUSExchangeComparisonRule.class) 3 private String streetCusip; Вот пример, в котором мы задаем параметры правила, в данном случае Bedeutung допустимого отклонения. Для сравнения наших данных, сравниваемое Bedeutung не может отклоняться более чем на 1,000. Используя параметр для указания значения отклонения позволит нам использовать то же правила для нескольких полей, с разным Bedeutungм допустимого отклонения. Единственная проблема в том, что эти параметры статические и не могут быть динамическими по причине природы аннотации. 1 @ReconField(id = USD_MKT_CAP, label = "MARKET CAP USD", displayFormat = 2 ReconDisplayFormat.NUMERIC_WHOLE, sourcesToCompare = 3 { ReconSource.LEGACY, ReconSource.PACE, ReconSource.BOB_PRCM }) 4 @ReconCustomRule(processor = ToleranceAmountRule.class, params = { "10000" }) 5 private BigDecimal usdMktCap; Wie Sie sehen, haben wir den Prozess des Vergleichs von Daten aus verschiedenen Datenbanken etwas flexibler gestaltet, indem wir zwei recht einfache Anmerkungen verwendet haben. In diesem speziellen Fall steuern Annotationen den Datenvergleichsprozess, sodass wir im Wesentlichen die Annotationen, die wir in den freigegebenen Daten finden, auswerten und sie zur Steuerung der Verarbeitung verwenden. Fazit Es gibt viele Artikel über Annotationen in Java, was sie tun und welche Regeln für ihre Verwendung gelten. In diesem Artikel wollte ich anhand von Beispielen zeigen, warum Sie sie nutzen sollten und wie Sie davon profitieren können. Bitte beachten Sie, dass dies erst der Anfang ist. Sobald Sie sich entschieden haben, Anmerkungen zu erstellen, müssen Sie herausfinden, wie Sie diese am effektivsten nutzen. In Teil 2 zeige ich Ihnen, wie Sie Anmerkungen mithilfe der Java-Reflektion verarbeiten. – Jonny Hackett, asktheteam@keyholesoftware.com Originalartikel http://www.javacodegeeks.com/2014/07/creating-your-own-java-annotations.html
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION