株洲建设网站制作,网络怎么推广自己的产品,做网站的公司哪家最好,分宜网站建设前言
讲到事件监听#xff0c;这里我们说下自定义事件和自定义监听器类的实现方式#xff1a; 自定义事件#xff1a;继承自ApplicationEvent抽象类#xff0c;然后定义自己的构造器 自定义监听#xff1a;实现ApplicationListener接口#xff0c;然后实现onApplication…前言
讲到事件监听这里我们说下自定义事件和自定义监听器类的实现方式 自定义事件继承自ApplicationEvent抽象类然后定义自己的构造器 自定义监听实现ApplicationListener接口然后实现onApplicationEvent方法
下面讲下4种事件监听的具体实现
1.手工向ApplicationContext中添加监听器
首先创建MyListener1类
public class MyListener1 implements ApplicationListenerMyEvent{Logger logger Logger.getLogger(MyListener1.class);public void onApplicationEvent(MyEvent event){logger.info(String.format(%s监听到事件源%s., MyListener1.class.getName(), event.getSource()));}
}然后在springboot应用启动类中获取ConfigurableApplicationContext上下文装载监听
SpringBootApplication
public class LisenterApplication{public static void main(String[] args){ConfigurableApplicationContext context SpringApplication.run(LisenterApplication.class, args);//装载监听context.addApplicationListener(new MyListener1());}
}2.将监听器装载入spring容器
创建MyListener2类并使用Component注解将该类装载入spring容器中
Component
public class MyListener2 implements ApplicationListenerMyEvent{Logger logger Logger.getLogger(MyListener2.class);public void onApplicationEvent(MyEvent event) {logger.info(String.format(%s监听到事件源%s., MyListener2.class.getName(), event.getSource()));}
}3.在application.properties中配置监听器
首先创建MyListener3类
public class MyListener3 implements ApplicationListenerMyEvent{Logger logger Logger.getLogger(MyListener3.class);public void onApplicationEvent(MyEvent event){logger.info(String.format(%s监听到事件源%s., MyListener3.class.getName(), event.getSource()));}
}然后在application.properties中配置监听
context.listener.classescom.listener.MyListener34.通过EventListener注解实现事件监听
创建MyListener4类该类无需实现ApplicationListener接口使用EventListener装饰具体方法
Component
public class MyListener4{Logger logger Logger.getLogger(MyListener4.class);EventListenerpublic void listener(MyEvent event){logger.info(String.format(%s监听到事件源%s., MyListener4.class.getName(), event.getSource()));}
}自定义事件代码如下
public class MyEvent extends ApplicationEvent{public MyEvent(Object source){super(source);}
}进行测试(在启动类中加入发布事件的逻辑)
SpringBootApplication
public class LisenterApplication{Autowiredprivate ApplicationEventPublisher applicationEventPublisher;Autowiredprivate ApplicationContext applicationContext;public static void main(String[] args){ConfigurableApplicationContext context SpringApplication.run(LisenterApplication.class, args);//装载事件context.addApplicationListener(new MyListener1());//发布事件方式1context.publishEvent(new MyEvent(测试事件.));//发布事件方式2applicationEventPublisher.publishEvent(new MyEvent(测试事件.));//发布事件方式3applicationContext.publishEvent(new MyEvent(测试事件.));}
}启动后日志打印如下
2022-06-15 10:51:20.198 INFO 4628 --- [ main] com.listener.MyListener3 : com.listener.MyListener3监听到事件源测试事件..
2022-06-15 10:51:20.198 INFO 4628 --- [ main] com.listener.MyListener4 : com.listener.MyListener4监听到事件源测试事件..
2022-06-15 10:51:20.199 INFO 4628 --- [ main] com.listener.MyListener2 : com.listener.MyListener2监听到事件源测试事件..
2022-06-15 10:51:20.199 INFO 4628 --- [ main] com.listener.MyListener1 : com.listener.MyListener1监听到事件源测试事件..由日志打印可以看出SpringBoot四种事件的实现方式监听是有序的