您当前的位置: 首页 >  spring

梁云亮

暂无认证

  • 2浏览

    0关注

    1211博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

SpringBoot事件监听

梁云亮 发布时间:2020-06-09 16:05:34 ,浏览量:2

概述

Spring框架提供了完善的事件监听机制,在Spring框架中实现事件监听的步骤如下:

  1. 自定义事件,继承org.springframework.context.ApplicationEvent抽象类
  2. 定义事件监听器,实现org.springframework.context.ApplicationListener接口
  3. 在Spring容器中发布事件

在Spring框架中提供了以下三种事件监听的方式:

  • 编程式:通过实现ApplicationListener接口来监听指定类型的事件
  • 注解式:通过在方法上加@EventListener注解的方式监听指定参数类型的事件,写该类需要托管到Spring容器中
  • 配置式:通过application.properties中配置context.listener.classes属性指定监听器
编程式 创建SpringBoot项目,添加依赖:

    org.springframework.boot
    spring-boot-starter-web

编程式 基础

第一步:自定义事件(模拟邮件发送):

public class EmailEvent extends ApplicationEvent {
    public EmailEvent(Object source) {
        super(source);
    }
}

第二步:自定义事件监听器:

@Component
public class EmailEventListener implements ApplicationListener {
    @Override
    public void onApplicationEvent(EmailEvent event) {//参数表示监听的事件的类型
        System.out.printf("监听到事件 %s :开始-%s \n" 
,event.getClass().getName(),event.getSource());
    }
}

第三步:创建Controller:

@RestController
public class DemoController {
    @Resource
    private ApplicationContext act;
    //发布事件
    @RequestMapping("/pubEvnet")
    public void pubEvnet() {
        //TODO:业务处理
        System.out.println("发布事件");
        act.publishEvent(new EmailEvent("发送邮件"));
        //TODO:业务处理
    }
}

部署项目,网页访问,控制台查看到结果:

改进一

第二步自定义事件监听器类的注解@Component可以省略,然后在项目启动类中手动添加注解就可以了,修改后的启动类代码如下:

@SpringBootApplication
public class EventDemoApplication{//对应com.hc.demo1包
    public static void main(String[] args) {
        ConfigurableApplicationContext cat = 
		SpringApplication.run(EventDemoApplication.class, args);
        cat.addApplicationListener(new EmailEventListener1());//手动添加监听
    }
}
改进二:

第二步自定义事件监听器类可以不用实现ApplicationListener接口,通过添加注解@EventListener指定监听方法以及参数类型的事件,写该类需要托管到Spring容器中。

@Component
public class EmailEventListener2 { //不需要继承任何接口
    @EventListener
    public void onApplicationEvent(EmailEvent2 event) {//参数表示监听的事件的类型
        System.out.printf("监听到 %s : 事件-%s", event.getClass().getName(), event.getSource());
    }
}

然后使用默认的系统启动类就可以了。

配置式

所谓的配置方式指的是在application.yml文件中配置context.listener.classes属性指定事件监听器,示例代码如下:

context:
    listener:
        classes: com.hc.demo3.EmailEventListener3

关注
打赏
1665409997
查看更多评论
立即登录/注册

微信扫码登录

0.0436s