Spring Event使用

作者 : 开心源码 本文共3118个字,预计阅读时间需要8分钟 发布时间: 2022-05-12 共180人阅读

SpringEvent 自己设置事件链,实用性很强的一种设计,可以利用它来做业务剥离,复杂场景解耦、代码独立等,也是事件驱动模型的核心,并且可以解决1对多,点对点,发布订阅的场景。

下面Demo是用4个Class来实现的:

1.ApplicationEventModel                     //创立上下文业务实体类,用来传递消息2.ApplicationSendEventService               //发送事件的接口,用来传递消息3.ApplicationListenerEventService           //监听事件,消费数据接口4.ApplicationRunMain                        //注入spring服务 ,测试类
/** * 接收上下文业务对象,继承ApplicationEvent对象,而继承ApplicationEvent对象最终是继承JDK里的EventObject事件类 * jdk中有observer观察者,java中的Event其实就是observer中的一个特例。 */public class ApplicationEventModel extends ApplicationEvent {    private String businessMessage;    /**     * 构造一个原型事件     *     * @param source          来源事件最初发生的对象     * @param businessMessage 来源事件要传递的内容     */    public ApplicationEventModel(Object source, String businessMessage) {        super(source);        this.businessMessage = businessMessage;    }    public String getBusinessMessage() {        return businessMessage;    }}
/** * 具体的业务实现类,发送事件 */@Component@Slf4jpublic class ApplicationSendEventService {    /**     * 发布事件     * 将该事件发送给对应的监听者     */    @Autowired    private ApplicationEventPublisher applicationEventPublisher;    /**     * A交易接口     */    public void tradeAtype(String message) {        log.info("第一步:生成A交易数据:{}....", message);        log.info("###通知交易信息....");        applicationEventPublisher.publishEvent(new ApplicationEventModel(this, message));    }    /**     * B交易接口     */    public void tradeBtype(String message) {        log.info("第一步:生成B交易数据:{}....", message);        log.info("###通知交易信息....");        applicationEventPublisher.publishEvent(new ApplicationEventModel(this, message));    }}
/** * 监听事件类 */@Component@Slf4jpublic class ApplicationListenerEventService implements ApplicationListener<ApplicationEventModel> {    @Override    public void onApplicationEvent(ApplicationEventModel applicationEventModel) {        log.info("监听到消息:{}", applicationEventModel.getBusinessMessage());    }}
@Slf4jpublic class ApplicationRunMain {    public static void main(String[] args) {        AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext();        applicationContext.register(ApplicationSendEventService.class, ApplicationListenerEventService.class);        applicationContext.refresh();        ApplicationSendEventService sendEventService = applicationContext.getBean(ApplicationSendEventService.class);        sendEventService.tradeAtype("A交易数据信息!");        log.info("########################################################################");        log.info("########################################################################");        sendEventService.tradeBtype("B交易数据信息!");    }}

打印日志

2019-02-27 15:54:14.717  INFO   --- [           main] c.b.m.w.c.ApplicationSendEventService    : 第一步:生成A交易数据:A交易数据信息!....2019-02-27 15:54:14.718  INFO   --- [           main] c.b.m.w.c.ApplicationSendEventService    : ###通知交易信息....2019-02-27 15:54:14.719  INFO   --- [           main] .b.m.w.c.ApplicationListenerEventService : 监听到消息:A交易数据信息!2019-02-27 15:54:14.719  INFO   --- [           main] c.b.m.web.config.ApplicationRunMain      : ########################################################################2019-02-27 15:54:14.719  INFO   --- [           main] c.b.m.web.config.ApplicationRunMain      : ########################################################################2019-02-27 15:54:14.720  INFO   --- [           main] c.b.m.w.c.ApplicationSendEventService    : 第一步:生成B交易数据:B交易数据信息!....2019-02-27 15:54:14.720  INFO   --- [           main] c.b.m.w.c.ApplicationSendEventService    : ###通知交易信息....2019-02-27 15:54:14.720  INFO   --- [           main] .b.m.w.c.ApplicationListenerEventService : 监听到消息:B交易数据信息!

知识点: springboot 里面的 AnnotationConfigApplicationContext类,直接可以帮你注入对象到spring中。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Spring Event使用

发表回复