SpringBoot使用四种方式实现事件监听
一、监听事件包含四个步骤
(1)自定义事件
(2)自定义监听器
(3)使Spring容器获取到监听器(4种方式)
(4)发布事件
二、演示四种实现方式
1、启动方法中添加监听
1)自定义事件
public class MyApplicationEvent extends ApplicationEvent { public MyApplicationEvent(Object source) { super(source); } }
2)自定义监听器
public class MyAppilcationListener implements ApplicationListener<MyApplicationEvent> { public void onApplicationEvent(MyApplicationEvent event) { System.out.println("接收到事件:"+event.getClass()); } }
3)添加监听、4)发布事件
public static void main(String[] args) { SpringApplication app=new SpringApplication(App.class); app.addListeners(new MyAppilcationListener());//添加监听 ConfigurableApplicationContext context=app.run(args); context.publishEvent(new MyApplicationEvent(new Object()));//发布事件 }
2、启动方法中不添加监听,监听类上添加@Component注解
1)自定义事件(同上)
2)自定义监听、3)添加监听
@Component public class MyAppilcationListener implements ApplicationListener<MyApplicationEvent> { public void onApplicationEvent(MyApplicationEvent event) { System.out.println("接收到事件:"+event.getClass()); } }
4)发布事件
public static void main(String[] args) { SpringApplication app=new SpringApplication(App.class); ConfigurableApplicationContext context=app.run(args); context.publishEvent(new MyApplicationEvent(new Object()));//发布事件 }
3、配置文件中添加context.listener.classes属性
1)自定义事件(同上)
2)自定义监听
public class MyAppilcationListener implements ApplicationListener<MyApplicationEvent> { public void onApplicationEvent(MyApplicationEvent event) { System.out.println("接收到事件:"+event.getClass()); } }
3)添加监听,application.properties里面设置
context.listener.classes=com.leiyuke.configuration.bean1.MyAppilcationListener
4)发布事件
public static void main(String[] args) { SpringApplication app=new SpringApplication(App.class); ConfigurableApplicationContext context=app.run(args); context.publishEvent(new MyApplicationEvent(new Object()));//发布事件
}
4、使用注解监听事件(推荐)
1)自定义事件(同上)
2)自定义监听、3)添加监听
@Component public class AA { @EventListener public void aa(MyApplicationEvent event) { System.out.println("接收到事件:"+event.getClass()); } }
4)发布事件
public static void main(String[] args) { SpringApplication app=new SpringApplication(App.class); ConfigurableApplicationContext context=app.run(args); context.publishEvent(new MyApplicationEvent(new Object()));//发布事件 }
三、Spring中的自定义事件
Spring中定义了许多事件,使用时不需要发布,下面举例ContextStoppedEvent(其他事件在同一包下)事件的使用
1)自定义事件(不需要)
2)自定义监听、3)添加监听
@Component public class BB { @EventListener public void bb(ContextStoppedEvent event) { System.out.println("接收到事件:"+event.getClass()); } }
4)发布事件(不需要)
测试:调用stop方法时触发 ContextStoppedEvent 事件,输出内容
public static void main(String[] args) { SpringApplication app=new SpringApplication(App.class); ConfigurableApplicationContext context=app.run(args); context.stop(); }