• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

哈士兔也被占用?

java相关技术知识总结,分享。。。。。。
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

springboot源码(六)

springboot自定义监听器

 我们先创建一个自定义监听器,来监听所有的事件。创建一个Java类,实现ApplicationListener接口在泛型中指定要监听的事件类型即可,如果要监听所有的事件,那么泛型就写ApplicationEvent。

自定义监听器:

1、实现ApplicationListener接口,在泛型中指定要监听的事件类型;

       如果事件类型是ApplicationEvent则表示监听所有的事件;

       如果是具体的某个类型比如ApplicationStartingEvent 则表示监听容器开始的时间;

2、需要把该监听器在spring.factories文件中配置 ;

 代码:

package com.syc.demo.listener;

public class MyListener implements ApplicationListener<ApplicationEvent>{ public void onApplicationEvent(ApplicationEvent applicationEvent){ System.out.println("MyListener--->"+applicationEvent); } }

  之后为了在容器启动中能够发下我们的监听器并且添加到SimpleApplicationEventMulticaster中,我们需要在spring.factories中注册自定义的监听器

在resources下创建META-INF/spring.factories文件

代码:

org.springframework.context.ApplicationListener=\
com.syc.demo.listener.MyListener

   这样当我们启动服务的时候就可以看到相关事件发布的时候,我们的监听器被触发了

 

3、如果监听特定事件呢?比如:ApplicationStartingEvent

就把泛型中ApplicationEvent替换成ApplicationStartingEvent即可。

代码:

package com.syc.demo.listener;

public class MyListener implements ApplicationListener<ApplicationStartingEvent>{
    public void onApplicationEvent(ApplicationEvent applicationEvent){
        System.out.println("MyListener--->"+applicationEvent);
    }
}

 配置文件保持不变。

 

4、如果监听自定义监听器监听自定义事件呢?

首先创建自定义事件,只需要继承ApplicationEvent即可。

代码:

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

 然后在自定义监听器中监听自定义事件

 

package com.syc.demo.listener;

public class MyListener implements ApplicationListener<MyEvent>{
    public void onApplicationEvent(ApplicationEvent applicationEvent){
        System.out.println("MyListener--->"+applicationEvent);
    }
}

  配置文件保持不变。

之后就可以在特定的业务场景中发布对应的事件了。

@RestController
public class EventController{
    @Autowired
    ApplicationContext context;  //获取容器对象

    @GetMapping("hello")
    public String  helloEvent(){
        //发布自定义事件
        context.publishEvent(new MyEvent(new Object()));
        return "hello";
    }
}

 

 

 

 

 

 这样一来不光搞清楚了SpringBoot中的监听机制,而且也可以扩展应用到我们业务开发中了。好了本文就给大家介绍到这里,希望对你有所帮助。

  

 

萝莉身,御姐心。。。。。

posted on 2022-03-30 16:28  哈士兔也被占用?  阅读(47)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3