国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

創建自定義的Java注解類的方法

2019-11-26 15:06:34
字體:
來源:轉載
供稿:網友

 如果你已經在使用Java編程,并且也使用了任何像Spring和Hibernate這樣的流行框架,那么你應該對注解的使用非常地熟悉。使用一個現有框架工作的時候,通常使用它的注解就夠了。但是,你是不是也有時候有要創建屬于你自己的注解的需求呢?

不久之前,我找到了一個自己創建一個注解的理由,那是一個涉及驗證存儲在多種數據庫中的常用數據的項目。
場景描述

該業務有多種數據庫都存儲著相同的數據,它們有各自不同的保持數據更新的方法. 該業務曾計劃把所有這些數據都整合到一個主數據庫中,以減輕涉及到多種數據源所帶來的問題的復雜性.


不過在項目開始之前,業務還需要知道數據距離可以同步還有多少差距,并做出任何必要的修正來使其可以進行同步. 第一步需要創建一個展示那些數據多種數據庫的通用數據的報表,并對其值進行驗證, 對那些不符合條件的記錄進行高亮顯示. 這里有一個對當時需求的簡短摘要:

  •     比對多種數據庫間公共部分的數據,諸如客戶,公司或者目錄信息.
  •     默認的值應該根據值的類型匹配所有的數據庫.
  •     對于某些字段,我們只想展示其值,而不要進行任何數據比較.
  •     對于某些字段,我們只想要對比其值,并在指定的特定數據源上進行數據驗證.
  •     對于某些字段,我們可能想要做一些復雜的數據比較,可能會基于記錄內的其它字段.
  •     對于某些字段,我們可能想要用一種特定格式對數據進行格式化,比如錢幣數量 使用 $000,000.00 .
  •     報表應該用MS Excel格式的,每一行都包含來自每個數據源的字段值. 任何不匹配數據驗證規則的行都應該用黃色高亮顯示.

注解

經過一陣子對需求和一些想法的推敲之后,我決定使用注解來驅動對于數據比對和報表處理的配置. 我們需要的東西得是簡單,而高度靈活可擴展的. 這些注解將會是字段級別的,而我就喜歡配置不會被隱藏在classpath某個地方的文件中. 如此,你就能夠直接查看同一個字段相關聯的注解,以便知曉它具體是如何進行處理的.

在最簡單的情況下,注解無非就是一個標記,就只是提供信息而不會對代碼執行的操作本身有直接影響的元數據. 如果你一直在從事Java編程,那么現在你對它們的使用應該相當的熟悉了, 但是可能你從來沒有過創建屬于你自己的注解的需求. 為此,你需要創建一個帶有Java類型@interface的新類型,它將包含能指定元數據詳細信息的要素.

這里有一個來自這個項目的示例:
 

@Target(ElementType.FIELD)@Retention(RetentionPolicy.RUNTIME)public @interface ReconField {   /**   * Value indicates whether or not the values from the specified sources should be compared or will be used to display values or reference within a rule.   *   * @return The value if sources should be compared, defaults to true.   */  boolean compareSources() default true;   /**   * Value indicates the format that should be used to display the value in the report.   *   * @return The format specified, defaulting to native.   */  ReconDisplayFormat displayFormat() default ReconDisplayFormat.NATIVE;   /**   * Value indicates the ID value of the field used for matching source values up to the field.   *   * @return The ID of the field.   */  String id();   /**   * Value indicates the label that should be displayed in the report for the field.   *   * @return The label value specified, defaults to an empty string.   */  String label() default "";   /**   * Value that indicates the sources that should be compared for differences.   *   * @return The list of sources for comparison.   */  ReconSource[] sourcesToCompare() default {}; }

這是驅動數據比對過程如何運作的主要注解. 它包含的基本要素,可以滿足不同數據源間數據進行比較的大部分需求. @ReconField 可以處理除更加復雜的比對之外,我們所期望的大多數需求, 而更加復雜的情況我們將會在稍后有所討論. 這些要素的大多數在代碼清單中一對一的注釋中都有介紹, 而需要指出的是,在我們的@ReconField上有幾個關鍵的注解.

    @Target

主站蜘蛛池模板: 陕西省| 鄂尔多斯市| 万盛区| 眉山市| 南澳县| 苍溪县| 亳州市| 马鞍山市| 紫阳县| 高州市| 长治市| 勐海县| 绍兴县| 建水县| 观塘区| 隆化县| 通化市| 麻江县| 全州县| 云南省| 临夏县| 砀山县| 霍州市| 华池县| 丘北县| 边坝县| 积石山| 淅川县| 陈巴尔虎旗| 定安县| 盖州市| 昌乐县| 靖边县| 丰台区| 辽宁省| 翁牛特旗| 伊通| 云阳县| 漠河县| 喜德县| 承德县|