Jika Anda sudah menggunakan pemrograman Java dan menggunakan kerangka kerja populer seperti Spring dan Hibernate, maka Anda harus terbiasa dengan penggunaan anotasi. Saat bekerja dengan kerangka kerja yang ada, biasanya cukup untuk menggunakan anotasi. Tetapi apakah Anda terkadang harus menciptakan kebutuhan Anda sendiri untuk membuat anotasi sendiri?
Belum lama ini, saya menemukan alasan untuk membuat anotasi, yang merupakan proyek yang melibatkan data umum yang disimpan dalam berbagai database.
Deskripsi adegan
Bisnis ini memiliki berbagai basis data yang menyimpan data yang sama, dan mereka memiliki cara berbeda untuk menjaga pembaruan data. masalah.
Namun, sebelum proyek dimulai, bisnis perlu mengetahui seberapa banyak jarak data dapat disinkronkan, dan membuat amandemen yang diperlukan untuk membuatnya disinkronkan. , Dan verifikasi nilainya, sorot catatan yang tidak memenuhi syaratnya.
anotasi
Setelah beberapa saat dengan pengawasan dan beberapa ide, saya memutuskan untuk menggunakan anotasi untuk mendorong konfigurasi perbandingan data dan memproses Konfigurasi tidak akan disembunyikan dalam file di tempat tertentu di Classpath.
Dalam kasus yang paling sederhana, anotasi tidak lebih dari sebuah tanda, hanya untuk memberikan informasi yang memberikan informasi tanpa operasi eksekusi kode itu sendiri akrab, tetapi Anda mungkin tidak perlu membuat anotasi Anda sendiri.
Berikut adalah contoh dari proyek ini:
@Target (elementType.field) @retentionpolicy.runtime) public @interface Reconfield { /*** Nilai menunjukkan bahwa nilai sumber yang ditentukan harus dibandingkan atau akan digunakan untuk menampilkan nilai atau referensi dalam menjalankan. Mengembalikan nilai jika sumber harus dibandingkan, default ke true. ) Nilai Recondisplayformat.native; Nilai menunjukkan label yang harus ditampilkan dalam laporan untuk api. ;}
Ini adalah anotasi utama tentang bagaimana proses perbandingan data beroperasi. Diskusikan nanti.
Anotasi Target memungkinkan Anda untuk menentukan bahwa anotasi Anda harus digunakan pada elemen Java itu.
@Retention, yang memungkinkan Anda untuk menentukan kapan anotasi efektif.
Proses verifikasi data ini akan menjalankan kueri untuk setiap database, dan memetakan hasilnya ke entitas yang menunjukkan kacang entitas dari semua bidang untuk jenis catatan bisnis tertentu Beberapa contoh untuk memahami bagaimana anotasi ini digunakan dalam konfigurasi perbandingan data yang berbeda.
Untuk memverifikasi nilai -nilai yang ada dan hanya mencocokkan pencocokan yang akurat dari setiap sumber data, Anda hanya perlu memberikan ID bidang dan tanda bidang pada laporan.
@Reconfield (id = customer_id, label = "customer id") Private String customerId;
Untuk menunjukkan nilai yang ditemukan di setiap sumber data, tetapi tanpa perbandingan data, Anda mungkin perlu membuat elemen sumber daya perbandingan dan mengatur nilainya menjadi false.
@Reconfield (id = name, label = "name", comparesources = false) nama string pribadi;
Untuk memverifikasi nilai yang ditemukan dalam sumber data yang ditentukan, tidak semua, Anda dapat menggunakan elemenSourcestocompare Cara, beberapa skenario data yang tidak disimpan di setiap sumber data dapat diproses.
@Reconfield (id = private_placement_flag, label = "bendera penempatan pribadi", sourcestocompare = {reconsource.legacy, reconsource.pace} g priveplacementflag;
Sekarang kami telah memenuhi kebutuhan dasar kami, dan kami perlu menyelesaikan masalah penerapan bidang yang ditentukan untuk kemampuan perbandingan data yang kompleks.
@Target (elementType.field) @retention (retentionpolicy.runtime) public @interface Reconscustomrule { /*** Nilai menunjukkan parameter yang digunakan untuk instantis memakan prosesor aturan khusus, nilai default tidak ada parameter. ] Dari parameter untuk instantiated run custom,* /string [] params () default {}; dari prosesor aturan khusus.*/class <?> Prosesor () default defaultreconrule.class;}
Ini sangat mirip dengan anotasi sebelumnya. akan perlu menerapkan antarmuka aturan universal.
Sekarang mari kita lihat contoh menggunakan anotasi ini.
Dalam contoh ini, kami menggunakan aturan khusus yang akan memeriksa apakah bursa saham adalah Amerika Serikat. rekor.
@Reconfield (id = street_cusip, label = "street cusip", comparesources = false) @reconcustomrule (prosesor = skipnonusexchangeComparisonrule.class) makan string streetcusip;
Di sini kami menentukan parameter untuk aturan khusus. Untuk menerapkan set aturan khusus yang sama ke beberapa bidang.
@Reconfield (id = USD_MKT_CAP, label = "Market Cap USD", DisplayFormat = RecondisplayFormat.numeric_whole, Sourcestocompare = {reconsource.legacy, reconsource.pace, reconsource.bob_prcm})@Reconstrule (pancat = reconsource.bob_prcm})@Reconstrule (pancat = procorsorsor = reconsource.bob_prcm})@reconstrule {reconsorsor = reconsource.bob_prcm})@ 10000 "}) private BigDecimal usdmktcap;
Seperti yang Anda lihat, kami hanya menggunakan beberapa anotasi sederhana, dan kami telah merancang fungsi laporan verifikasi data dengan tingkat fleksibilitas yang cukup besar untuk skenario perpustakaan multi -data. Oleh karena itu, kami benar -benar menggunakan anotasi untuk menghitung entitas data pemetaan yang ditemukan dan menggunakannya secara langsung untuk diproses.