Xử lý sự kiện vào mùa xuân
Bạn đã thấy trong tất cả các chương rằng cốt lõi của Spring là ApplicationContext, quản lý vòng đời hoàn chỉnh của hạt cà phê. ApplicationContext xuất bản các loại sự kiện nhất định khi tải các bean. Ví dụ: ContextStartedEvent được xuất bản khi khởi động ngữ cảnh và ContextStoppedEvent được xuất bản khi ngữ cảnh bị dừng.
Xử lý trong trường hợp ApplicationContext được cung cấp thông qua các ApplicationEvent lớp và ApplicationListener giao diện. Do đó, nếu một bean triển khai ApplicationListener , thì mỗi khi một ApplicationEvent được xuất bản lên ApplicationContext, bean đó sẽ được thông báo.
Spring cung cấp các sự kiện tiêu chuẩn sau:
Sr.No. | Sự kiện & mô tả tích hợp trong mùa xuân |
---|---|
1 | ContextRefreshedEvent Sự kiện này được xuất bản khi ApplicationContext được khởi tạo hoặc làm mới. Điều này cũng có thể được nêu ra bằng cách sử dụng phương thức refresh () trên giao diện ConfigurableApplicationContext . |
2 | ContextStartedEvent Sự kiện này được xuất bản khi ApplicationContext được khởi động bằng phương thức start () trên giao diện ConfigurableApplicationContext . Bạn có thể thăm dò cơ sở dữ liệu của mình hoặc bạn có thể khởi động lại bất kỳ ứng dụng nào đã dừng sau khi nhận được sự kiện này. |
3 | ContextStoppedEvent Sự kiện này được xuất bản khi ApplicationContext bị dừng bằng phương thức stop () trên giao diện ConfigurableApplicationContext . Bạn có thể làm công việc quản gia bắt buộc sau khi nhận được sự kiện này. |
4 | ContextClosedEvent Sự kiện này được xuất bản khi ApplicationContext được đóng bằng phương thức close () trên giao diện ConfigurableApplicationContext . Một bối cảnh khép kín đến hết tuổi thọ của nó; nó không thể được làm mới hoặc khởi động lại. |
5 | RequestHandledEvent Đây là một sự kiện dành riêng cho web nói với tất cả các bean rằng một yêu cầu HTTP đã được phục vụ. |
Việc xử lý sự kiện của Spring là một luồng nên nếu một sự kiện được xuất bản, cho đến khi và trừ khi tất cả người nhận nhận được thông báo, các quá trình sẽ bị chặn và luồng sẽ không tiếp tục. Do đó, cần cẩn thận khi thiết kế ứng dụng của bạn nếu xử lý sự kiện được sử dụng.
Nghe các sự kiện theo ngữ cảnh
Để lắng nghe một sự kiện ngữ cảnh, bean phải triển khai giao diện ApplicationListener chỉ có một phương thứconApplicationEvent(). Vì vậy, hãy để chúng tôi viết một ví dụ để xem cách các sự kiện lan truyền và cách bạn có thể đặt mã của mình để thực hiện tác vụ cần thiết dựa trên các sự kiện nhất định.
Hãy để chúng tôi có một IDE Eclipse đang hoạt động và thực hiện các bước sau để tạo một ứng dụng Spring -
Bươc | Sự miêu tả |
---|---|
1 | Tạo một dự án với tên SpringExample và tạo một gói com.tutorialspoint trongsrc thư mục trong dự án đã tạo. |
2 | Thêm các thư viện Spring bắt buộc bằng cách sử dụng tùy chọn Thêm JAR bên ngoài như được giải thích trong chương Ví dụ về Spring Hello World . |
3 | Tạo các lớp Java HelloWorld , CStartEventHandler , CStopEventHandler và MainApp trong gói com.tutorialspoint . |
4 | Tạo tệp cấu hình Đậu Beans.xml trongsrc thư mục. |
5 | Bước cuối cùng là tạo nội dung của tất cả các tệp Java và tệp Cấu hình Bean và chạy ứng dụng như được giải thích bên dưới. |
Đây là nội dung của HelloWorld.java tập tin
package com.tutorialspoint;
public class HelloWorld {
private String message;
public void setMessage(String message){
this.message = message;
}
public void getMessage(){
System.out.println("Your Message : " + message);
}
}
Sau đây là nội dung của CStartEventHandler.java tập tin
package com.tutorialspoint;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextStartedEvent;
public class CStartEventHandler
implements ApplicationListener<ContextStartedEvent>{
public void onApplicationEvent(ContextStartedEvent event) {
System.out.println("ContextStartedEvent Received");
}
}
Sau đây là nội dung của CStopEventHandler.java tập tin
package com.tutorialspoint;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextStoppedEvent;
public class CStopEventHandler
implements ApplicationListener<ContextStoppedEvent>{
public void onApplicationEvent(ContextStoppedEvent event) {
System.out.println("ContextStoppedEvent Received");
}
}
Sau đây là nội dung của MainApp.java tập tin
package com.tutorialspoint;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ConfigurableApplicationContext context =
new ClassPathXmlApplicationContext("Beans.xml");
// Let us raise a start event.
context.start();
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.getMessage();
// Let us raise a stop event.
context.stop();
}
}
Sau đây là tệp cấu hình Beans.xml
<?xml version = "1.0" encoding = "UTF-8"?>
<beans xmlns = "http://www.springframework.org/schema/beans"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id = "helloWorld" class = "com.tutorialspoint.HelloWorld">
<property name = "message" value = "Hello World!"/>
</bean>
<bean id = "cStartEventHandler" class = "com.tutorialspoint.CStartEventHandler"/>
<bean id = "cStopEventHandler" class = "com.tutorialspoint.CStopEventHandler"/>
</beans>
Khi bạn đã hoàn tất việc tạo các tệp cấu hình nguồn và bean, hãy để chúng tôi chạy ứng dụng. Nếu mọi thứ đều ổn với ứng dụng của bạn, nó sẽ in ra thông báo sau:
ContextStartedEvent Received
Your Message : Hello World!
ContextStoppedEvent Received
Nếu muốn, bạn có thể xuất bản các sự kiện tùy chỉnh của riêng mình và sau đó, bạn có thể nắm bắt tương tự để thực hiện bất kỳ hành động nào đối với các sự kiện tùy chỉnh đó. Nếu bạn quan tâm đến việc viết các sự kiện tùy chỉnh của riêng mình, bạn có thể kiểm tra Sự kiện tùy chỉnh trong mùa xuân.