1. Java benutzerdefinierte Anmerkungen und Frühling
Java -Anmerkungen als eine Art Metadateninformationen von Programmelementen (Klassen, Mitgliedervariablen, Mitgliedermethoden usw.) haben keinen Einfluss auf die Ausführung des Programms selbst. Durch benutzerdefinierte Anmerkungen können Sie den Programmelementen spezielle Erklärungen hinzufügen.
Als Plattform zum Aufbau von Anwendungen auf Unternehmensebene bietet Spring reichhaltige Funktionen. Durch die Kombination von Javas benutzerdefinierten Anmerkungen mit Spring zur Implementierung der Analyse und Verarbeitung von Anmerkungen in bestimmten Szenarien kann der Kopplungsgrad der Anwendungen und die Skalierbarkeit des Programms verbessert werden.
2. Anwendungsszenarien
Im Folgenden fasst mehrere Anwendungsszenarien zusammen und erklärt nur die allgemeine Idee (PS: Nicht alle Szenarien wurden im Projekt praktiziert).
2.1 Login, Berechtigungsblockierung
In Webprojekten sind Anmeldeabhörungen und Berechtigungsabhörungen eine Klischeefunktion. Durch benutzerdefinierte Anmeldeanmerkungen oder Annotationen für die Berechtigte analysieren Sie Anmerkungen im benutzerdefinierten Interceptor, um Anmeldungs- und Berechtigungsabhörungsfunktionen zu realisieren.
Diese Nutzungsmethode hat eine einfache Konfiguration, eine hohe Flexibilität und eine geringe Codekopplung.
2.2 Timing -Aufgabenverwaltung
Während des Systemkonstruktionsprozesses werden verschiedene Anforderungen an zeitgesteuerte Aufgaben erfolgen, und das zentrale Management zeitgesteuerter Aufgaben kann den Betrieb des Systems effizienter aufrechterhalten.
Die benutzerdefinierten Timing -Aufgaben -Anmerkungen im Kapitel WiederholungsAnnotationskapitel des offiziellen Java -Annotationsdokuments können die Timing -Aufgabenerklärung der Geschäftsmethoden erkennen. In Kombination mit dem Postprozessor von Spring Container BeanpostProcessor (PS: Spring Container Postprozessor wird im nächsten Artikel erörtert) analysieren benutzerdefinierte Anmerkungen. Mit den Anmerkungsinformationen an der Parsen -Annotation werden dann die Timing -Timing -Timing -Timing -Aufgabe mit Quartzapi erstellt, mit der die Laufzeit -Erstellung und die zentralisierte Verwaltung der Timing -Aufgabe abgeschlossen werden können.
Diese Methode kann vermeiden, die Konfiguration von Quarz -Timing -Aufgaben zu definieren und die Systemskalierbarkeit zu verbessern.
2.3 Datenquellenspezifikation für die Routing von Multi-Data-Quellen
AbstractroutingDataSource, die von Spring bereitgestellt wird, implementiert dynamisches Routing mehrerer Datenquellen und kann unter einer Master-Slave-Trennungsarchitektur angewendet werden. Durch Angeben verschiedener Datenquellen für verschiedene Methoden wird dynamisches Routing von Datenquellen realisiert (z. B.: Die Lesen von Methoden gehen aus der SLAVE -Datenbankdatenquelle, und die Schreibmethoden gehen aus der Hauptdatenbankdatenquelle). So identifizieren Sie den Datenquellentyp, der verschiedenen Methoden entspricht, mit benutzerdefinierten Anmerkungen implementiert. Die Routing -Funktion der Datenquelle wird realisiert, indem der entsprechende Datenquellentyp analysiert wird, der auf der Methode deklariert ist.
Diese Methode vermeidet das Analyse von Methoden (zum Beispiel: Beginn mit SELECT, Beginn mit Update usw.), und die Deklaration ist flexibler.
Benutzerdefinierte Anmerkungen
Schauen wir uns das einfachste Beispiel an. Während der Verwendung von Springweb -Anwendungen verwenden wir zwangsläufig @Controller, @Service, @Repository und andere Anmerkungen, um JavaBeans zu definieren. Wie können Sie selbst eine Annotation selbst definieren? Feder kann automatisch geladen werden. Es gibt also das erste Beispiel.
@Target ({elementtype.type})@retention (retentionPolicy.runtime)@documented@componentpublic @Interface MyComponent {String value () Standard "";} @ConfigurationPublic Class componentAnnotationTest {public static void main (string [] args) {AnnotationConFigApplicationContext AnnotationConFigApplicationContext = new AnnotationConFigApplicationContext (); AnnotationConfigApplicationContext.refresh (); InjectClass InjectClass = AnnotationConfigapplicationContext.getbean (InjectClass.Class); InjectClass.print (); } @MyComponent public static class InjectClass {public void print () {System.out.println ("Hallo Welt"); }}}Führen Sie dieses Beispiel aus und Sie werden feststellen, dass die von @MyComponent kommentierte Klasse ebenfalls nach Frühling geladen wird und normal als gewöhnlicher Javabäe verwendet werden kann. Wenn Sie den Quellcode von Spring überprüfen, werden Sie feststellen, dass Spring CLASSPATHSCANNINGCANDIDATEComponentProvider zum Scannen von Paket verwendet. Diese Klasse hat eine solche Annotation.
Ein Komponentenanbieter, der den Klassenpfad aus einem Basispaket scannt. Es gilt dann ausschließend und füge Filter in die resultierenden Klassen ein, um Kandidaten zu finden.
Die RegisterDefaultFilters -Methode dieser Klasse enthält mehrere Codezeilen
Protected void RegisterDefaultFilters () {this.includeFilters.add (neue AnnotationTypeFilter (component.class)); Classloader cl = classPathScanningCandidateComponentProvider.class.getClassloader (); try {this.includeFilters.add (neue AnnotationTypeFilter (((Klasse <? Erweitert Annotation>) clasutils.forname ("javax.annotation.Managedbean", cl)), false)); logger.debug ("jsr-250 'javax.annotation.managedBean' gefunden und unterstützt für das Scannen von Komponenten"); } catch (classNotFoundException ex) {// JSR -250 1.1 API (wie in Java ee 6 enthalten) nicht verfügbar - einfach überspringen. } try {this.includeFilters.add (neue AnnotationTypeFilter ((Klasse <? Erweitert Annotation>) clasutils.forname ("javax.inject.named", cl)), false)); logger.debug ("JSR-330 'javax.inject.Named' Annotation gefunden und unterstützt für das Scannen von Komponenten"); } catch (classNotFoundException ex) {// JSR -330 API nicht verfügbar - einfach überspringen. }}Hier werden Sie feststellen, dass die Verwendung von Scan -Klasseninformationen durch Spring nur die von @component kommentierte Klasse beurteilen wird, sodass jede benutzerdefinierte Annotation durch Frühling gescannt und in den Container injiziert werden kann, solange sie mit @Component ausgestattet ist (natürlich muss ein String -Wert () Standard "" ";
Zusammenfassen
Das Obige dreht sich alles um die kurze Diskussion dieses Artikels über die Anwendung von benutzerdefinierten Anmerkungen im Frühjahr. Ich hoffe, es wird für alle hilfreich sein. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!