Schnittstellenrückruf
Der Hörer verwendet im Wesentlichen den Rückrufmechanismus, um einige unserer eigenen Code vor oder nach einer Aktion auszuführen. In der Java -Sprache können Schnittstellen verwendet werden.
Implementieren Sie einen Hörerfall
Definieren Sie ausgiebig in der Frühlingsumgebung direkt: Nehmen Sie die Arbeit als Beispiel, um den Hörer am Anfang (oder am Ende) der Arbeit zu definieren.
1. Definieren Sie die Schnittstelle für den Rückruf
Paket com.yawn.demo.Listener;/** * @Author erstellt von Yawn am 2018-01-21 13:53 */public interface WorkListener {void onStart (String-Name);}2. Definieren Sie die Aktion
Paket com.yawn.demo.service; import com.yawn.demo.listener.workListener;/** * @Author erstellt von Yawn am 2018-01-21 13:39 */ @ServicePublic Class MyService {@resource private penSservice pelsonservice; privater Workurlistener -Hörer; public void setworkListener (WorkListener WorkListener) {this.Listener = WorkListener; } public void work (String name) {listener.onstart (name); personSservice.work (); }}Aktionsarbeit ist eine bestimmte Methode. Zum richtigen Zeitpunkt der Arbeit () () wird die oben definierte Schnittstelle aufgerufen. Darüber hinaus muss in dieser Aktionsdefinitionsklasse die Methode zur Festlegung des Hörers verbessert werden.
3. Hören Sie sich die Prüfung an
@Runwith (springrunner.class) @springboottestpublic class DemospringAnnotationApplicationTests {@resource private myService myService; @Test public void test1 () {// Schnittstelleneinstellungen Listener myService.setworkListener (neuer WorkListener () {@Override public void onStart (String name) {System.out.println ("Work Work for" + name + "! System.out.println ("Arbeit für" + name + "!")); // MyService.work ("Boss"); } @Test public void test2 () {// Erben Sie die Implementierungsklasse, um den Hörer myService.setworkListener (New MyworkListener ()) festzulegen; // MyService.work ("Boss"); } class myworkListener erweitert WorkListenerAdaptor {@Override public void onStart (String name) {System.out.println ("Arbeit für" + name + "! }}}Unter Verwendung der beiden oben genannten Methoden wurden die Ergebnisse erhalten:
Beginnen Sie mit der Arbeit für Boss! Hart arbeiten ...
Dies zeigt, dass der Hörcode, den wir in der Testklasse geschrieben haben, bevor die Aktionsarbeit stattfindet, ausgeführt wird, um den Zweck des Klassenhörens zu erreichen.
Implementierung des Hörers mit Anmerkungen
Im obigen Code wird die Aufrufen der Methode SetworkListener (WorkListener -Listener) im Allgemeinen als Listener (Register) bezeichnet. Jedes Mal, wenn Sie einen Hörer registrieren, müssen Sie im Allgemeinen eine Klasse schreiben, um eine definierte Schnittstelle zu implementieren oder die Klasse zu erben, die die Schnittstelle implementiert, und dann die Interface -Definitionsmethode neu zu schreiben. Daher wollten intelligente Programmierer diesen Prozess vereinfachen, sodass sie eine Möglichkeit entwickelten, Anmerkungen zu verwenden. Schreiben Sie mit Annotationen das Segment des Hörcode -Segments in eine Methode und verwenden Sie Annotation, um diese Methode zu markieren.
In der Tat ist die Verwendung einfach geworden, aber die Implementierung ist nicht unbedingt wahr.
1. Definieren Sie eine Annotation
Paket com.yawn.demo.anno; @target (elementtype.method) @retention (retentionPolicy.runtime) public @Interface WorkListener {}2. Analytische Anmerkungen
Paket com.yawn.demo.anno; import com.yawn.demo.service.myService; import org.springframework.beans.beansexception; import org.springframework org.springframework.context.ApplicationContextaware; import org.springframework.stereotype.comPonent; import Javax.annotation.resource; import Java.lang.Annotation java.util.map;/** * @Author erstellt von YAWN am 2018-01-21 14:46 */ @componentpublic class WorkListenerParser implementiert ApplicationContextaware, InitializingBean {@resource private myService myService; private applicationContext applicationContext; @Override public void AfterPertieStieSt () löst Ausnahme aus {map <String, Object> ListenerBeans = getExePectListenerBeans (controller.class, restcontroller.class, service.class, component.class); für (Objekthörer: listenerbeans.values ()) {für (Methode Methode: listener.getClass (). getDeclaredMethods ()) {if (! methode.isannotationPresent (WorkListener.class)) {Fortsetzung; } myService.setworkListener (Name -> {try {method.invoke (louser, name);} catch (Ausnahme E) {e.printstacktrace ();}}); }}}} / ** * Finden Sie Beans, die Annotationen verwenden können * @param AnnotationTypes-Annotationstyp, die gescannt werden muss LinkedHasMap <> (); für (Klasse <? Erweitert Annotation> AnnotationType: AnnotationTypes) {Map <String, Objekt> AnnotatedBeansmap = ApplicationContext.getbeanSwithannotation (AnnotationType); listenerbeans.putall (kommentatedBeansmap); } return louserBeans; } @Override public void setApplicationContext (ApplicationContext applicationContext) löst beansexception {this.applicationContext = ApplicationContext; }}Richten Sie während der Analyse der Annotation den Hörer ein.
In der Parsing -Klasse wird die Schnittstellenanwendung contextaware implementiert. Um den Verweis auf applicationContext in der Klasse zu erhalten, wird sie verwendet, um die Bohne im IOC -Container zu erhalten. und die Implementierung der Schnittstelleninitialisierungsbean wird implementiert, um den Code für Parsen -Anmerkungen auszuführen und den Hörer zu einer geeigneten Zeit zu setzen. Wenn Sie dies nicht tun, können Sie den analysierten Code aufrufen und Code festlegen, wenn der CommandLinerUnner ausgeführt wird, und der ApplicationContext kann auch automatisch injiziert werden.
3. Test
Nach der Ausführung des obigen Codes ist der Listener bereits eingerichtet und kann getestet werden.
Paket com.yawn.demo.controller; import com.yawn.demo.anno.workListener; import com.yawn.demo.service.myService; javax.annotation.resource;/** * @Author erstellt von YAWN am 2018-01-21 13:28 */ @rastControllerPublic class testcontroller {@resource private myService myService; @GetMapping ("/work") public Object Work () {MyService.work ("Boss"); zurück "fertig"; } @WorkListener public void listen (String name) {System.out.println ("Arbeit für" + name + "!"); }}Schreiben Sie eine Überwachungsmethode, der Parametertyp und die Nummer entsprechen der Schnittstelle und fügen Sie dann benutzerdefinierte Anmerkungen hinzu. Nach dem Beginn der Umgebung ist der Hörer bereits festgelegt.
Rufen Sie dann die myService -Methode von work () über URL an und Sie können das Ergebnis sehen:
Beginnen Sie mit der Arbeit für Boss! Hart arbeiten ...
Die Hörmethode wurde aufgerufen. In der nächsten Entwicklung können Sie diese Annotation verwenden, um den Hörer zu registrieren.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.