如果你已經在使用Java編程,并且也使用了任何像Spring和Hibernate這樣的流行框架,那么你應該對注解的使用非常地熟悉。使用一個現有框架工作的時候,通常使用它的注解就夠了。但是,你是不是也有時候有要創建屬于你自己的注解的需求呢?
不久之前,我找到了一個自己創建一個注解的理由,那是一個涉及驗證存儲在多種數據庫中的常用數據的項目。
場景描述
該業務有多種數據庫都存儲著相同的數據,它們有各自不同的保持數據更新的方法. 該業務曾計劃把所有這些數據都整合到一個主數據庫中,以減輕涉及到多種數據源所帶來的問題的復雜性.
不過在項目開始之前,業務還需要知道數據距離可以同步還有多少差距,并做出任何必要的修正來使其可以進行同步. 第一步需要創建一個展示那些數據多種數據庫的通用數據的報表,并對其值進行驗證, 對那些不符合條件的記錄進行高亮顯示. 這里有一個對當時需求的簡短摘要:
注解
經過一陣子對需求和一些想法的推敲之后,我決定使用注解來驅動對于數據比對和報表處理的配置. 我們需要的東西得是簡單,而高度靈活可擴展的. 這些注解將會是字段級別的,而我就喜歡配置不會被隱藏在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 主站蜘蛛池模板: 陕西省| 鄂尔多斯市| 万盛区| 眉山市| 南澳县| 苍溪县| 亳州市| 马鞍山市| 紫阳县| 高州市| 长治市| 勐海县| 绍兴县| 建水县| 观塘区| 隆化县| 通化市| 麻江县| 全州县| 云南省| 临夏县| 砀山县| 霍州市| 华池县| 丘北县| 边坝县| 积石山| 淅川县| 陈巴尔虎旗| 定安县| 盖州市| 昌乐县| 靖边县| 丰台区| 辽宁省| 翁牛特旗| 伊通| 云阳县| 漠河县| 喜德县| 承德县|