Spring Framework kann "Ereignisse" in der Mitte des Dienstes generieren. Auf diese Weise kann die Verarbeitung "lose gekoppelt" erfolgen, so dass die Verarbeitung des Dienstes in Teile geteilt werden kann.
Es funktioniert nur, indem es zwischen den Diensten eingeklemmt wird, sodass es für die Protokollausgabe und die Cache-Trends effektiv zu sein scheint. Da es eine unabhängige Konfiguration hat, ist es effektiv, wenn Sie verhindern möchten, dass die Verarbeitung des Dienstes langwierig wird, oder wenn Sie möchten, dass jemand anderes einige der Funktionen erstellt.
Anstatt die ab Spring 4.3 implementierten Annotationen zu implementieren, werden wir sie dieses Mal erstellen, indem wir die Schnittstelle und gorigori implementieren.
Erstellen Sie zunächst eine Ereignisklasse, die ** ApplicationEvent ** erbt. ** MyBeanEvent () ** wird hier ausgeführt.
MyBeanEvent.java
public class MyBeanEvent extends ApplicationEvent {
public MyBeanEvent(Object source) {
super(source);
//TODO automatisch generierter Konstruktor-Stub
System.out.println("Create MyBeanEvent");
}
}
Erstellen Sie dann einen Ereignis-Listener
Sie müssen lediglich eine Schnittstelle mit dem Namen ** ApplicationListner
MyBeanEventListener.java
public class MyBeanEventListener implements ApplicationListener<MyBeanEvent> {
@Override
public void onApplicationEvent(MyBeanEvent event) {
//TODO automatisch generierter Methodenstub
System.out.println("Event Has Finished!!");
}
}
Dieser Ereignis-Listener wird immer nach dem Ende des Ereignisses aufgerufen. Es kann sinnvoll sein, ein Endprotokoll zu schreiben
Erstellen Sie dann einen ** Dienst **, der das Ereignis ausführt. (Ich werde den Platz weglassen, um die Bohne in DI zu registrieren!)
MyBeanEventService.java
public class MyBeanEventService implements ApplicationEventPublisherAware{
@Autowired
private MyBeanEve beanEve;
private ApplicationEventPublisher publisher;
@Override
public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) {
//TODO automatisch generierter Methodenstub
this.publisher = applicationEventPublisher;
System.out.println("publisher set!!");
}
public void doService(String message) {
System.out.println("Service Started!");
beanEve.addMessage(message);
publisher.publishEvent(new MyBeanEvent(this));
}
}
Hier ist die Verarbeitung, die tatsächlich funktioniert, der doService-Teil. Von ** setApplicationEventListenerPublisher ** Wird eine Veranstaltung veröffentlichen. Publisher ist eine Convenience-Klasse, die Ereignisse veröffentlicht. Sie führen jetzt die Ereignisverarbeitung aus.
Registrieren Sie abschließend den Ereignis-Listener und -Dienst in Java Config. Das Spring Framework ist jetzt bereit, die Veranstaltung zu veröffentlichen. (* ^ - ^ *)
MyBeanEveConfig.java
@Configuration
@ComponentScan(basePackages = "com.TsugaruInfo.bean")
public class MyBeanEveConfig {
@Bean
MyBeanEve myBean2() {
return new MyBeanEve();
}
@Bean
public MySampleApplicationListener addListener() {
return new MySampleApplicationListener();
}
@Bean
public MyBeanEventListener mybeanListener() {
return new MyBeanEventListener();
}
@Bean
public MyBeanEventService mybeanService() {
return new MyBeanEventService();
}
}
Führen Sie den Dienst abschließend auf dem Servlet oder Controller aus. Dieses Mal wird es von einem Servlet ausgeführt. Es funktioniert möglicherweise nicht, weil ich es ein wenig geändert habe (/ _;)
MySampleServlet.java
@WebServlet("/sample")
public class MySampleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
ApplicationContext app;
@Autowired
private MyBeanEventService myService;
/**
* @see HttpServlet#HttpServlet()
*/
public void init() throws ServletException{
super.init();
SpringBeanAutowiringSupport
.processInjectionBasedOnCurrentContext(this);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String message = request.getParameter("message");
myService.doService(message);
response.sendRedirect("sample");
}
Lassen Sie uns dieses Servlet einbetten und den Server starten.
Sie sollten die Zeichen ** Publisher-Set !! ** auf der Konsole sehen. (Lassen Sie andere Zeichen Es ist ein Beweis dafür, dass der Dienst ordnungsgemäß in DI registriert ist.
Lassen Sie uns einen Moment darauf zugreifen und die Methode verschieben.
Aus den Buchstaben auf der Konsole ** Service → Ereignis → Ereignis-Listener ** Sie können sehen, dass es in der Reihenfolge von funktioniert.
Wenn Sie es gut verwenden, können Sie die Verarbeitung, die Sie verwenden möchten, vor dem Dienst ausführen. Dies ist eine praktische Funktion. Zu diesem Zweck ist jedoch die Gestaltung des zu teilenden Prozesses sehr wichtig. ~~ Es ist besser, das Team über die Beziehung zwischen dem Service und der Veranstaltung zu informieren (ry ~~
Denken Sie an Ihr Design und programmieren Sie intelligent im Frühling!
Nachschlagewerk Spring Framework 5 Einführung in die Programmierung https://www.amazon.co.jp/Spring-Framework-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E6%8E%8C%E7%94%B0-%E6%B4%A5%E8%80%B6%E4%B9%83/dp/4798053740
Recommended Posts