Spring 事件记录
2023-09-11 14:18:11 时间
⒈定义一个事件,继承 ApplicationEvent 接口。
1 package cn.coreqi.eventdemo.event; 2 3 import org.springframework.context.ApplicationEvent; 4 5 public class ProjectEvent extends ApplicationEvent { 6 private String id; 7 private String projectStatus; 8 9 public String getId() { 10 return id; 11 } 12 13 public String getProjectStatus() { 14 return projectStatus; 15 } 16 17 public ProjectEvent(Object source, String id, String projectStatus){ 18 super(source); 19 this.id = id; 20 this.projectStatus = projectStatus; 21 } 22 }
2.定义一个监听者,实现 ApplicationListener,以下二选其一,需要注意Spring的版本,以1为优先选项。
1.
1 package cn.coreqi.eventdemo.listener; 2 3 import cn.coreqi.eventdemo.event.ProjectEvent; 4 import org.springframework.context.ApplicationListener; 5 import org.springframework.stereotype.Component; 6 7 @Component 8 public class ProjectListener implements ApplicationListener<ProjectEvent> { 9 @Override 10 public void onApplicationEvent(ProjectEvent event) { 11 System.out.println("接收到的项目id: " + event.getId()); 12 System.out.println("接受到的项目类型: " + event.getProjectStatus()); 13 //开始业务处理 14 } 15 }
2.
1 @EventListener 2 public void registerProjectEventListener(ProjectEvent event){ 3 System.out.println("这是第二种监听方式"); 4 System.out.println("接收到的项目id: " + event.getId()); 5 System.out.println("接受到的项目类型: " + event.getProjectStatus()); 6 //开始业务处理 7 }
3.发布【这里是手动发布,一般是以quartz等任务框架去推动发布】
1 public static void main(String[] args) { 2 //SpringApplication.run(ApplicationMain.class, args); 3 ConfigurableApplicationContext context = SpringApplication.run(ApplicationMain.class, args); 4 context.publishEvent(new ProjectEvent(context,"7777","开始")); 5 }
【可选】4.异步
1 package cn.coreqi.eventdemo.config; 2 3 import org.springframework.context.annotation.Bean; 4 import org.springframework.context.annotation.Configuration; 5 import org.springframework.context.event.ApplicationEventMulticaster; 6 import org.springframework.context.event.SimpleApplicationEventMulticaster; 7 import org.springframework.core.task.SimpleAsyncTaskExecutor; 8 9 @Configuration 10 public class AsynchronousSpringEventsConfig { 11 12 @Bean(name = "applicationEventMulticaster") 13 public ApplicationEventMulticaster simpleApplicationEventMulticaster() 14 { 15 SimpleApplicationEventMulticaster eventMulticaster = new SimpleApplicationEventMulticaster(); 16 eventMulticaster.setTaskExecutor(new SimpleAsyncTaskExecutor()); //不是最优选择 17 return eventMulticaster; 18 } 19 20 }
相关文章
- spring-线程池(3)
- 面试题:被final修饰的类可以被spring代理吗?
- Spring Boot Cache配置 序列化成JSON字符串
- Spring Boot 事件和监听
- 我做了个违背程序员的决定,开源了这份 SPRING 全家桶神级手册
- Spring Boot 监听 Redis Key 失效事件实现定时任务
- Spring MVC+Spring+Mybatis实现支付宝支付功能(附完整代码)
- Spring中PropertyPlaceholderConfigurer替换占位符的问题
- spring源码分析(一)IOC管理Bean
- spring batch(二):核心部分(1):配置Spring batch
- 注意:Spring Boot 2.7开始spring.factories不推荐使用了,接下来这么玩...
- Spring中Template模式与callback的结合使用浅析
- Spring Cloud 微服务架构学习笔记与示例
- spring aop使用,spring aop注解,Spring切面编程
- Spring整合CXF步骤,Spring实现webService,spring整合WebService
- spring的context---ServletContext WebApplicationContext---Spring各种上下文的关系详解
- spring框架漏洞整理(Spring Cloud Config路径穿越导致的信息泄露)
- spring框架漏洞整理(Spring Data漏洞)
- Spring Cloud :整合Gateway 学习 (二)
- 【转】Spring学习---为什么要用spring,springMVC
- Spring RestTemplate介绍
- mvn打包spring工程成jar时报Unable to locate Spring NamespaceHandler for XML schema namespace错误解决办法
- Spring 的优秀工具类盘点---转