Crearea propriilor adnotări în Java

Crearea propriilor adnotări în Java

Dacă programați în Java și folosind oricare dintre cele mai populare cadre, cum ar fi Spring si Hibernate. atunci sunteți deja familiarizați cu utilizarea adnotărilor. În lucrul cu cadrul existent - adnotări interne suficient. Dar ce se întâmplă dacă doriți să creați propriile adnotări?
Nu cu mult timp în urmă am avut un motiv pentru a crea propria adnotare pentru proiect, care a necesitat o confirmare a informațiilor generale din mai multe baze de date.
scenariu
Business a fost de mai multe baze de date în care aceleași informații și date sunt actualizate în multe feluri a fost salvat. Acesta a fost planificat să combine datele dintr-o bază de date principală, pentru a elimina problemele asociate cu obținerea de date din diverse surse.
Dar, înainte de a începe un proiect, ar trebui să aflați cât de multe date nu este sincronizat, și să facă modificările necesare. Primul pas a fost de a crea un raport, care va afișa aceleași date în diferite baze de date și de a confirma valoarea sau a evidenția acele înregistrări care nu se potrivesc, pe baza unor reguli stabilite de reconciliere. Mai jos sunt cerințele de bază ale expunerii la momentul proiectului:
• Comparați datele din mai multe baze de date pentru căutarea aceleași date, cum ar fi numele clientului, firma sau informații în catalog.
• Valoarea implicită ar trebui să fie exact la fel în toate bazele de date, în funcție de tipul de date.
• Pentru anumite domenii, am vrut doar să arate că valoarea este găsit, dar valoarea nu este comparat.
• Pentru alte domenii, ne-ar fi comparat doar cu valoarea găsită și confirmă datele cu datele din sursa.
• Pentru al treilea câmp, ne-ar dori să facă o comparație dificilă a datelor, care ar trebui să se bazeze pe valoarea altor domenii în cadrul unei înregistrări.
• Pentru al patrulea tip de câmp am dorit pentru a formata datele, de exemplu, în formatul moneda $ 000,000.00.
• raport trebuie să fie în format MS Excel, fiecare rând trebuie să conțină o valoare dintr-o sursă separată. Orice linie care nu se potrivește cu termenii confirmării datelor, ar trebui să fie evidențiate în galben.
adnotări
După ce am citit cerința și-au exprimat mai multe încarnări diferite de idei a ceea ce este necesar, am decis să utilizeze adnotări, care va lansa compararea datelor de configurare și a procesului de raportare. Avem nevoie de o soluție simplă, dar flexibilă și scalabilă. Aceste adnotări vor fi la nivel de câmp, și mi-a plăcut faptul că configurația nu va fi ascuns într-un fișier undeva în classpath. In schimb, pot vedea adnotările asociate cu câmpul pentru a ști exact cum va fi procesată.
Pur și simplu pune - rezumatul va fi nimic mai mult decât un simbol, metadatele care va furniza informații, dar nu va afecta în mod direct performanța codului în sine. Dacă ați programat deja în Java, atunci ar trebui să fie familiarizați cu utilizarea de abstract, dar poate că nu au nevoie pentru a crea propriile lor. Pentru a face acest lucru, aveți nevoie pentru a crea un nou tip, care utilizează un tip @interface Java. care va conține elemente care, la rândul său, definesc detaliile de metadate.
Aici este un exemplu al proiectului:


Pentru a afișa valorile obținute de la fiecare sursă de date, dar face compararea datelor, trebuie să specificați elementul compareSources și setați valoarea la false.


Pentru a confirma faptul că valoarea se găsește într-o sursă de date specifice, dar nu toate, trebuie să utilizați elementul sourcesToCompare. Acest ecran toate valorile găsite, ci o comparație a tuturor datelor din sursele de date apar în conformitate cu lista de elemente. Acesta este cazul, în cazul în care unele date nu sunt stocate în toate sursele de date. ReconSource - acest enum, în care sunt disponibile sursele de date pentru comparație.

Acum, că ne-am îndeplinit cerințele de bază, avem nevoie pentru a efectua o comparație a mai complexe de date, care este specific domeniului. Pentru a face acest lucru vom crea oa doua adnotare, care va lansa reguli de procesare.

Foarte similar cu adnotarea anterioară, o mare diferență este că în @ReconCustomRule vom specifica o clasă care va începe datele comparație atunci când rulează procesul de Recon. Puteți specifica doar clasa care vor fi folosite pentru valorile atribuite handler și inițializa orice clasă pe care le specificați. Această clasă în adnotarea va utiliza interfața reguli, care, la rândul său, va fi utilizat de către manipulator pentru a executa regulile.
Să vedem câteva exemple ale acestei adnotări.
În acest exemplu, vom folosi o regulă care va verifica schimb valutar nu este în Statele Unite și în acest caz, săriți compararea datelor. Pentru a face acest lucru, avem nevoie pentru a verifica câmpul țară din aceeași înregistrare.


Iată un exemplu în cazul în care ne-am stabilit parametrii regulii, în acest caz, valoarea de toleranță. Pentru a compara valoarea noastră compararea datelor poate să nu se abată cu mai mult de 1.000. Utilizarea parametru pentru a specifica valoarea abaterii ne va permite să utilizeze aceleași reguli pentru un număr de domenii, cu diferite valori de toleranță. Singura problemă este că acești parametri sunt statice și nu poate fi din cauza naturii dinamice a adnotărilor.

După cum puteți vedea avea un pic de flexibilitate în procesul de comparare a datelor din diferite baze de date cu ajutorul a două adnotări relativ simple. Pentru acest caz particular procesul de comparare a datelor de control adnotare, astfel că, de fapt, estimăm adnotări, pe care le găsim în comun de date și să le folosească pentru a ghida procesul.
concluzie
Există numeroase articole pe adnotările în Java, ceea ce fac ei și care sunt regulile de utilizare a acestora. În acest articol, am vrut să arăt, pe baza unor exemple de ce ar trebui să le folosească, și ce beneficiile acestui puteți obține.
Rețineți că acesta este doar începutul. Odată ce ați decide să creați adnotări, va trebui să înțeleagă cum să le folosească cel mai eficient. În a doua parte, vă voi arăta cum să se ocupe de adnotare folosind Java de reflecție.
- Jonny Hackett, [email protected]