如果你已經在使用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上有幾個關鍵的注解.
国产精品一区二区久久久久| 国内精品小视频在线观看| 宅男66日本亚洲欧美视频| 欧美日韩国产影院| 亚洲一区二区三区乱码aⅴ| 亚洲国产精品中文| 91精品久久久久久久久久久久久| 日韩黄在线观看| 国产成人avxxxxx在线看| 亚洲国产中文字幕久久网| 亚洲国产欧美一区| 亚洲欧美国产一本综合首页| 国产精品白丝jk喷水视频一区| 一本色道久久综合狠狠躁篇的优点| 欧美精品18videos性欧| 亚洲视频一区二区三区| 亚洲视频在线播放| 成人h视频在线观看播放| 色琪琪综合男人的天堂aⅴ视频| 日韩动漫免费观看电视剧高清| 日韩精品一区二区三区第95| 国产一区二区三区三区在线观看| 欧美成年人视频网站| 91精品久久久久久久| 国产精品久久二区| 91在线观看免费观看| 亚洲福利精品在线| 欧美成人精品一区二区| 日韩在线国产精品| 伊人精品在线观看| 色偷偷av亚洲男人的天堂| 欧美黄色片免费观看| 国产精品十八以下禁看| 成人国产亚洲精品a区天堂华泰| 国产日韩精品在线观看| 日韩中文字幕网址| 激情成人在线视频| 亚洲自拍偷拍网址| 色偷偷9999www| 欧美精品少妇videofree| 91精品视频免费看| 国产一区二区三区欧美| 精品福利在线视频| 国产婷婷成人久久av免费高清| 欧美日韩国产在线播放| 亚洲成色www8888| 国产精品久久在线观看| 在线观看欧美视频| 国产精品视频男人的天堂| 国产黑人绿帽在线第一区| 亚洲欧洲激情在线| 成人看片人aa| 亚洲色图35p| 91精品视频在线看| 亚洲国产精品资源| 成人黄色免费看| 亚洲精品日韩丝袜精品| 久久久久久亚洲精品不卡| 欧美日韩一区二区免费在线观看| 久久精品91久久香蕉加勒比| 色悠悠久久88| 久久久久成人精品| 在线色欧美三级视频| 国产亚洲欧美另类中文| 欧美电影免费看| 精品国产视频在线| 欧美老肥婆性猛交视频| 精品久久久一区| 欧美大成色www永久网站婷| 97精品视频在线观看| 91精品久久久久| 久久久久久这里只有精品| 亚洲色图综合久久| 亚洲第一在线视频| 欧美激情图片区| 日韩视频在线免费观看| 亚洲综合中文字幕在线观看| 日韩av免费观影| 国产日韩欧美在线看| 亚洲国产精品免费| 北条麻妃99精品青青久久| 日韩大片免费观看视频播放| 性色av一区二区咪爱| 欧美—级高清免费播放| 欧美日韩久久久久| 最近2019年好看中文字幕视频| 欧美专区福利在线| 亚洲高清免费观看高清完整版| 国产成人福利视频| 国产精品91久久久| 亚洲一区二区免费| 亚洲日本中文字幕免费在线不卡| 亚洲男人天堂2023| 精品久久久久久国产91| 久久精品视频亚洲| 色在人av网站天堂精品| 国产精品影片在线观看| 亚洲精品在线91| 免费av一区二区| 色av吧综合网| 亚洲国产欧美一区二区三区同亚洲| 91久久精品日日躁夜夜躁国产| 久久国产精品久久精品| 欧美老女人xx| 亚洲在线第一页| 欧美黄色片在线观看| 91在线精品播放| 久久久av网站| 欧美日韩高清在线观看| 性欧美长视频免费观看不卡| 国产999精品视频| 欧美成人亚洲成人日韩成人| 永久免费看mv网站入口亚洲| 欧美在线观看www| 亚洲女人天堂av| 欧美中文字幕精品| 韩国三级日本三级少妇99| 日韩欧美亚洲综合| 亚洲欧美一区二区三区在线| 国产成人一区二区在线| 日韩精品视频免费专区在线播放| 在线视频日韩精品| 欧美日韩国产限制| 97精品国产91久久久久久| 国产日韩av高清| 国产日韩换脸av一区在线观看| 日韩av资源在线播放| 91wwwcom在线观看| 精品久久久久久久久久久久久久| 最近日韩中文字幕中文| 亚洲一区二区三区xxx视频| 国产亚洲成av人片在线观看桃| 成人xvideos免费视频| 日韩精品在线免费| 欧美在线一区二区三区四| 理论片在线不卡免费观看| 日韩国产精品亚洲а∨天堂免| 91成人福利在线| 亚洲综合在线小说| 国产91精品青草社区| 国产精品久久电影观看| 欧美性猛交xxxx久久久| 国产精品欧美一区二区三区奶水| 日韩欧美在线国产| 欧美黑人又粗大| 久久精品精品电影网| 日本一区二区不卡| 在线观看欧美成人| 欧美一区二区影院| 日韩av最新在线| 日韩一区二区精品视频| 亚洲区免费影片| 亚洲直播在线一区| 国产视频综合在线| 日韩中文字幕在线看| 亚洲2020天天堂在线观看| 美女福利视频一区| 亚洲精品视频免费在线观看| 在线观看精品国产视频| 国产亚洲在线播放| 精品一区二区三区三区| 黑人精品xxx一区| 欧洲午夜精品久久久| 精品久久久久久电影|