Интерфейс обратный вызов
Слушатель, по сути, использует механизм обратного вызова, чтобы выполнить часть нашего собственного кода до или после действия действия. На языке Java можно использовать интерфейсы.
Внедрить случай слушателя
Для удобства, непосредственно определить в весенней среде: возьмите работу в качестве примера для определения слушателя в начале (или в конце) работы.
1. Определите интерфейс для обратного вызова
Пакет com.yawn.demo.listener;/** * @author, созданный Yawn на 2018-01-21 13:53 */Public Interface WorkListener {void OnStart (String name);}2. Определите действие
пакет com.yawn.demo.service; import com.yawn.demo.listener.worklistener;/** * @author, созданный Yawn на 2018-01-21 13:39 */ @ServicePublic Class MyService {@Resource Private Personservice Personservice; частный слушатель рабочего списка; public void SetWorkListener (WorkListener WorkListener) {this.Listener = workListener; } public void work (string name) {listener.onstart (name); Personservice.work (); }}Работа действий - это конкретный метод. В соответствующее время метода Work () используется интерфейс, определенный выше. Кроме того, в этом классе определения действия необходимо улучшить метод установки слушателя.
3. Слушайте тест
@Runwith (springrunner.class) @springboottestpublic class demospringannotationapplicationtests {@resource private myservice myservice; @Test public void test1 () {// Настройки интерфейса слушатель myservice.setworklistener (new WorkListener () {@Override public void OnStart (String name) {System.out.println ("Start Work для" + name + "! System.out.println («Начать работу для» + name + »!»)); // Работайте myservice.work ("Boss"); } @Test public void test2 () {// наследует класс реализации, чтобы установить слушатель myservice.setworklistener (new MyWorkListener ()); // Работайте myservice.work ("Boss"); } class myWorkListener Extends workListenerAdaptor {@Override public void onStart (String name) {System.out.println ("Start Work for" + name + "!"); }}}Используя два вышеупомянутых метода для проверки, были получены результаты:
Начните работу для босса! Работаю много ...
Это показывает, что до начала действия действия выполняется код прослушивания, который мы написали в тестовом классе, выполняется для достижения цели прослушивания класса.
Реализация слушателя с аннотациями
В приведенном выше коде вызов метода SetWorkListener (WorkListener Listener) обычно называют Susterer (регистр), который должен установить код прослушивания, который вы написали в качестве слушателя действий. Однако каждый раз, когда вы регистрируете слушателя, вам, как правило, нужно написать класс для реализации определенного интерфейса или наследовать класс, который реализует интерфейс, а затем переписать метод определения интерфейса. Поэтому умные программисты хотели упростить этот процесс, поэтому они придумали способ использовать аннотации. Используя аннотации, запишите сегмент кода прослушивания методом и используйте аннотацию, чтобы отметить этот метод.
Действительно, использование стало простым, но реализация не обязательно верна.
1. Определите аннотацию
Package com.yawn.demo.anno; @Target (elementType.method) @retention (hestententypolicy.runtime) public @Interface WorkListener {}2. Аналитические аннотации
Пакет com.yawn.demo.anno; import com.yawn.demo.service.myservice; import org.springframework.beans.beansexception; импорт org.springframework.beans.factory.initializationbean; импорт org.spramework.context.ApplicationContext. org.springframework.context.applicationcontextaware; import org.springframework.stereotype.component; импорт javax.annotation.resource; импорт java.lang.annotation.annotation; импорт java.lang.reflec.method; java.ut.linkedhashashamap; @author, созданный Yawn на 2018-01-21 14:46 */ @ComponentPublic Class WorkListEnerParser реализует ApplicationContextAware, инициализация Bean {@Resource Private MyService MyService; Private ApplicationContext ApplicationContext; @Override public void efpropertiesset () бросает исключение {map <string, object> listenerbeans = getExpectisterenerbeans (controller.class, restcontroller.class, service.class, component.class); for (Object Hellocer: alingerbeans.values ()) {for (метод метода: слушатель.getClass (). getDeclaredMethods ()) {if (! method.isannotationpresent (worklistener.class)) {продолжение; } myService.setWorkListener (name -> {try {method.invoke (слушатель, name);} catch (Exception e) {e.printStackTrace ();}}); }}}} / ** * Найти фасоль, которые можно использовать для аннотаций * @param annotationtypes, тип аннотации класса на уровне класса, которые необходимо отсканировать * @return Map Сканированные бобы * / private <String> getExpectListenerBeans (Class <? Extends Annotation> ... AnnotationTypes) {map <string> delirederBeans = LeastleDASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMASHMENTATIONS> ... ANNOTATIONTYPES). для (класс <? Extends Annotation> AnnotationType: AnnotationTypes) {map <String, Object> AnnotatedBeansMap = ApplicationContext.getBeanSwithannotation (AnnotationType); Слушательбан. } вернуть слушатель beans; } @Override public void setApplicationContext (ApplicationContext ApplicationContext) Throws BeanSexception {this.ApplicationContext = ApplicationContext; }}Во время анализа аннотации настройте слушателя.
В классе диаграммы реализуется интерфейс ApplicationContextAware. Чтобы получить ссылку на ApplicationContext в классе, он используется для получения боба в контейнере IOC; и реализация интерфейса инициализируется, чтобы выполнить выполнение кода аннотаций анализа и установки слушателя в подходящее время. Если вы этого не сделаете, вы можете вызвать проанализированный код и установить код, когда выполняется CommandLineRunner, и приложение Context также может быть автоматически введено.
3. тест
После выполнения приведенного выше кода слушатель уже настроен и может быть протестирован.
Пакет com.yawn.demo.controller; import com.yawn.demo.anno.worklistener; import com.yawn.demo.service.myservice; импорт org.springframework.web.bindtation.restcoping; import org.spramework.web.bindtation.restcontroller; javax.annotation.resource;/** * @author, созданный Yawn на 2018-01-21 13:28 */ @restcontrollerpublic class testcontroller {@resource private myservice myservice; @Getmapping ("/work") public Object work () {myservice.work ("boss"); вернуть "сделано"; } @WorkListener public void Listen (String name) {System.out.println ("Start Work for" + name + "!"); }}Напишите метод мониторинга, тип параметра и номер такие же, как интерфейс, а затем добавьте пользовательские аннотации. После того, как среда запускается, слушатель уже установлен.
Затем вызовите метод работы () MyService через URL, и вы можете увидеть результат:
Начните работу для босса! Работаю много ...
Метод прослушивания был вызван. В следующей разработке вы можете использовать эту аннотацию, чтобы зарегистрировать слушателя.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.