美文网首页程序员
Spring Event使用

Spring Event使用

作者: Randolph555 | 来源:发表于2019-02-27 15:57 被阅读91次

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
@Slf4j
public 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
@Slf4j
public class ApplicationListenerEventService implements ApplicationListener<ApplicationEventModel> {

    @Override
    public void onApplicationEvent(ApplicationEventModel applicationEventModel) {

        log.info("监听到消息:{}", applicationEventModel.getBusinessMessage());
    }
}


@Slf4j
public 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中。

相关文章

  • spring event 使用

    使用场景 在开发中有些重要业务需要记录日志并保存.使用spring event 事件发布日志,统一监听日志并记录....

  • Spring Event使用

    SpringEvent 自定义事件链,实用性很强的一种设计,可以利用它来做业务剥离,复杂场景解耦、代码独立等,也是...

  • spring-boot event

    spring-boot 事件模型: event - listenter event ApplicationEven...

  • Spring事件源码解析

    Spring事件监听源码分析 众所周知,在Spring中集成了内部的消息分发机制,可以在代码中使用注解@Event...

  • Spring Event & SpringBoot Event

    最近看到有说 Spring Event和SpringBoot Event两种 Event仔细看才知道,他们将Spr...

  • Spring Event

    Spring Event Observer Design Pattern Scenario Elvis, Jame...

  • spring event

    spring event的事件驱动模型的最佳实践@EventListenerhttps://blog.csdn.n...

  • Spring Event-Driven Architecture

    前言 Spring Event-Driven 是Java生态中关于Event-Driven编程范式的最佳实践标准之...

  • Spring中的事件讲解(Application Event)

    1 Spring事件简介 当Spring的事件(Application Event)为Bean和Bean之间的消息...

  • Spring Event的同步和异步,以及实现机制

    Spring Event 通知机制,可以很有效的帮助项目中的代码解耦合。咱们来看下它的同步和异步使用方式,以及相应...

网友评论

    本文标题:Spring Event使用

    本文链接:https://www.haomeiwen.com/subject/fuywyqtx.html