Grundlegende Unterstützung
Werfen wir zunächst einen Blick darauf, welche Standardereignisse unterstützt werden
Programm 1 (Service)
Erster Blick im Programm
ApplicationEventPublisher ist eine Federsache und muss zum Senden injiziert werden. Da ApplicationEventPublisherAware implementiert ist, ruft die setApplicationEventPublisher-Methode es automatisch für uns auf und ruft den Broadcast-Absender ab
/** * @author Carl * @date 2016/8/28 * @modify 版权所有.(c)2008-2016.广州市森锐电子科技有限公司 */public class EmailService implements ApplicationEventPublisherAware { private List<String> blackList; private ApplicationEventPublisher publisher; public void setBlackList(List<String> blackList) { this.blackList = blackList; } public void setApplicationEventPublisher(ApplicationEventPublisher publisher) { this.publisher = publisher; } /** * 具体广播类 * @param address * @param text */ public void sendEmail(String address, String text) { if (blackList.contains(address)) { BlackListEvent event = new BlackListEvent(this, address, text); publisher.publishEvent(event); return; } // send email... } }
Programm 2 (Ereignis)
Hier müssen Sie auch ApplicationEvent erben und einige Ihrer eigenen erforderlichen Parameter usw. implementieren, damit Sie diese erhalten, wenn Sie die Übertragung erhalten. Natürlich ist dies möglich Verwenden Sie auch die Quelle
/** * @author Carl * @date 2016/8/28 * @modify 版权所有.(c)2008-2016.广州市森锐电子科技有限公司 */public class BlackListEvent extends ApplicationEvent { private String address; private String test; public BlackListEvent(Object source, String address, String test) { super(source); this.address = address; this.test = test; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public String getTest() { return test; } public void setTest(String test) { this.test = test; } }
Programm 3 (Empfänger)
Sie müssen bei Verwendung von Spring weiterhin dessen Spezifikationen befolgen. Dann muss der Empfänger die ApplicationListener-Schnittstelle implementieren, also alle Objekte, die Wenn Sie die generische Übertragung erhalten, wird die onApplicationEvent-Schnittstelle weitergeleitet
Natürlich ist Spring sehr nachdenklich und implementiert nicht unbedingt die ApplicationListener-Klasse. Fügen Sie die Annotation @EventListener
/** * @author Carl * @date 2016/8/28 * @modify 版权所有.(c)2008-2016.广州市森锐电子科技有限公司 */public class BlackListNotifier implements ApplicationListener<BlackListEvent> { private String notificationAddress; public void setNotificationAddress(String notificationAddress) { this.notificationAddress = notificationAddress; } @EventListener public void onApplicationEvent(BlackListEvent event) { // notify appropriate parties via notificationAddress... System.out.println("onApplicationEvent, some thing I receive:" + event.getAddress() + ",text:" + event.getTest()); } @EventListener(condition = "#event.test == 'foo'") public void onApplicationCustomerEvent(BlackListEvent event) { System.out.println("onApplicationCustomerEvent,some thing I receive:" + event.getAddress() + ",text:" + event.getTest()); // notify appropriate parties via notificationAddress... } @EventListener({ContextStartedEvent.class, ContextRefreshedEvent.class}) public void handleContextStart() { System.out.println("-------------handleContextStart"); } /** * 参数可以给BlackListEvent 可以不给 */ @EventListener(classes = {BlackListEvent.class}) public void handleBlackListEvent() { System.out.println("-------------handleBlackListEvent"); } }
@EventListener
< hinzu 🎜> zur Bean-Klasse. Genau wie das obige Programm kann sie auch über die Annotation @EventListener implementiert werden , die nur ausgeführt werden, wenn die Bedingungen erfüllt sind Klassen, wenn das Ereignisobjekt ausgelöst wird, wird diese Klasse ausgeführt Programm 4 (Config Bean)Hier hauptsächlich Registriert einige Dienste und akzeptiert Broadcast-Beans, um/** * 配置 * @author Carl * @date 2016/8/28 * @modify 版权所有.(c)2008-2016.广州市森锐电子科技有限公司 */@Configurationpublic class AppConfig { @Bean public EmailService emailService() { EmailService s = new EmailService(); List<String> emails = new ArrayList<>(3); emails.add("known.spammer@example.org"); emails.add("known.hacker@example.org"); emails.add("john.doe@example.org"); s.setBlackList(emails); return s; } @Bean public BlackListNotifier notifier() { BlackListNotifier notifier = new BlackListNotifier(); notifier.setNotificationAddress("blacklist@example.org"); return notifier; } }