事件及监听并不是SpringBoot的新功能,Spring框架早已提供了完善的事件监听机制,在Spring框架中实现事件监听的流程如下:
-
自定义事件,继承org.springframework.context.ApplicationEvent抽象类
-
定义事件监听器,实现org.springframework.context.ApplicationListener接口
-
在Spring容器中发布事件
实现自定义事件及监听
- 定义事件
//自定义事件
public class ApplicationEventTest extends ApplicationEvent {
public ApplicationEventTest(Object source) {
super(source);
}
/**
* 事件处理事项
* @param msg
*/
public void printMsg(String msg)
{
System.out.println("监听到事件:"+ApplicationEventTest.class);
}
}
- 定义监听器
//自定义事件监听器
//@Component
public class ApplicationListenerTest implements ApplicationListener<ApplicationEventTest> {
@Override
public void onApplicationEvent(ApplicationEventTest event) {
event.printMsg(null);
}
}
- 在Spring容器中发布事件
public static void main(String[] args) {
SpringApplication application = new SpringApplication(SpringbootdemoApplication.class);
//需要把监听器加入到spring容器中
application.addListeners(new ApplicationListenerTest());
Set<ApplicationListener<?>> listeners = application.getListeners();
ConfigurableApplicationContext context = application.run(args);
//发布事件
context.publishEvent(new ApplicationEventTest(new Object()));
context.close();
}
上面的示例是在SpringBoot应用中简单的测试一下。
实际开发中实现监听还有其他的方式,在Spring框架中提供了两种事件监听的方式:
-
编程式:通过实现ApplicationListener接口来监听指定类型的事件
-
注解式:通过在方法上加@EventListener注解的方式监听指定参数类型的事件,写该类需要托管到Spring容器中
在SpringBoot应用中还可以通过配置的方式实现监听:
3. 通过application.properties中配置context.listener.classes属性指定监听器
下面分别分析一下这三种监听方式
编程式实现监听
实现ApplicationListenser接口:
@Component
publ