如果你已經在使用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 主站蜘蛛池模板: 客服| 芜湖市| 浏阳市| 景宁| 松桃| 万安县| 腾冲县| 凉城县| 吴川市| 富蕴县| 车险| 蛟河市| 扶余县| 依兰县| 静乐县| 平安县| 修武县| 五寨县| 汪清县| 彭州市| 常山县| 霍邱县| 孝昌县| 永德县| 马公市| 休宁县| 鸡东县| 启东市| 太和县| 安康市| 泸定县| 大足县| 中牟县| 夏津县| 临泉县| 县级市| 百色市| 万载县| 漳州市| 林甸县| 曲周县|