spring boot: 一般注入说明(五) @Component, application event事件为Bean与Bean之间通信提供了支持
2023-09-14 08:57:51 时间
spring的事件,为Bean与Bean之间通信提供了支持,当一个Bean处理完成之后,希望另一个Bean知道后做相应的事情,这时我们就让另外一个Bean监听当前Bean所发送的事件。
spring的事件应该遵循:
1.自定义事件,集成:ApplicationEvent
2.自定义事件监听,实现ApplicationListener
3.使用容器发布事件
//自定义事件
package ch2.event; import org.springframework.context.ApplicationEvent; //自定义事件 public class DemoEvent extends ApplicationEvent { private static final long serialVerisionUID = 1L; private String msg; public DemoEvent(Object source, String msg) { super(source); // TODO Auto-generated constructor stub this.msg = msg; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } }
//事件监听器
package ch2.event; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; //事件监听器 //@Component把普通pojo实例化到spring容器中,相当于配置文件中的<bean id="" class=""/> //@service注入:当前类是spring管理的一个bean @Component public class DemoListener implements ApplicationListener<DemoEvent> { @Override public void onApplicationEvent(DemoEvent event) { // TODO Auto-generated method stub //接受消息 String msg = event.getMsg(); //打印消息 System.out.println("我(bean-DemoListener)接收到了bean-DemoPublisher发布的消息:"+msg); } }
//事件发送
package ch2.event; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; //事件发送 //把普通pojo实例化到spring容器中当成一个Bean @Component public class DemoPublisher { //将ApplicationContext类的实体Bean注入到DemoPublisher中,让DemoPublisher拥有ApplicationContext的功能 //使用applicationContext来发布事件 @Autowired ApplicationContext applicationContext; public void publish(String msg) { //使用applicationContext的event来发布消息 applicationContext.publishEvent(new DemoEvent(this, msg)); } }
配置类
package ch2.event; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ComponentScan; //声明本类是一个配置类 @Configuration //导入ch2.event包下的所有@Service,@Component,@Repository,@Controller注册为Bean @ComponentScan("ch2.event") public class EventConfig { }
运行:
package ch2.event; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Main { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(EventConfig.class); DemoPublisher demoPublisher = context.getBean(DemoPublisher.class); demoPublisher.publish("hello application event"); context.close(); } }
结果:
我(bean-DemoListener)接收到了bean-DemoPublisher发布的消息:hello application event
相关文章
- Spring+Shiro搭建基于Redis的分布式权限系统(有实例)
- spring boot: 计划任务@ EnableScheduling和@Scheduled
- spring与jdbc整合
- Spring Boot 微服务性能下降九成!使用 Arthas 定位根因
- 近3年常考的Spring面试题及答案
- Spring Boot 集成 Spring Security 入门案例教程
- Spring Boot 配置文件 – 在坑中实践
- 跟我学SpringCloud | 第七篇:Spring Cloud Config 配置中心高可用和refresh
- [Kotlin Spring boot] Dependency injection
- spring boot:shardingsphere多数据源,支持未分表的数据源(shardingjdbc 4.1.1)
- Spring MVC--使用默认的servlet来响应静态文件
- Spring Boot 2.0 新特性(二):新增事件ApplicationStartedEvent
- 11_Spring Boot 集成Thymeleaf模板
- 【项目实战】spring-boot-configuration-processor 一个用于生成配置元数据的注解处理器
- Spring Boot集成Druid出现异常报错的原因及解决
- Spring Boot 之spring.factories
- 深入理解 Redis Template及4种序列化方式__spring boot整合redis实现RedisTemplate三分钟快速入门
- 学习Spring Boot:(十一) 自定义装配参数
- 学习Spring Boot:(八)Mybatis使用分页插件PageHelper
- spring boot --- 使用 注解 读取 properties 文件 信息
- Spring Boot 项目打包问题集锦: jar依赖多出boot-inf 文件夹问题/多环境动态打包/缺少BOOT-INF目录问题等...
- 解决spring boot shiro的 Consider defining a bean named ‘shiroFilterFactoryBean‘ in your configuration问题
- 002-spring cache 基于注解的缓存-01-关键注解概述、spel、缓存Key 与 缓存解析器
- 009-Spring Boot 事件监听、监听器配置与方式、spring、Spring boot内置事件
- spring-boot-starter-aop及其使用场景说明
- 如何使用Spring Cloud搭建高可用的Elasticsearch集群?详解Elasticsearch的安装与配置及Spring Boot集成的实现
- 【java】Spring Boot --spring boot项目整合xxl-job