SpringBoot自定义监听器

【问题】实现ApplicationListener接口和实现SmartApplicationListener 接口? 

实现ApplicationListener接口针对单一事件监听

实现SmartApplicationListener 接口针对多种事件监听

其它注意:

Order值越小越优先执行

使用application.properties中定义的优于其它方式

【问题】如何自定义监听器? 

一、实现方式1

1、创建监听器类FirstListener.java

@Order(1)
public class FirstListener  implements ApplicationListener<ApplicationStartedEvent> {

    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {
        System.out.println("hello, first listener");
    }
}

  

2、在spring.factories文件中增加配置监听器

org.springframework.context.ApplicationListener=com.example.demo.listener.FirstListener

3、运行查看效果

二、实现方式2

1、创建监听器类

@Order(2)
public class SecondListener   implements ApplicationListener<ApplicationStartedEvent> {

    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {
        System.out.println("hello, second listener");
    }
}

  

2、实例化SpringApplication,然后增加监听器

@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class Sb2Application {

	public static void main(String[] args) {

		SpringApplication springApplication = new SpringApplication(Sb2Application.class);
		springApplication.addListeners(new SecondListener());
		springApplication.run(args);
	}

}

  

3、运行

三、实现方式3

1、创建监听器类

@Order(3)
public class ThirdListener implements ApplicationListener<ApplicationStartedEvent> {

    @Override
    public void onApplicationEvent(ApplicationStartedEvent event) {
        System.out.println("hello, third listener");
    }
}

  

2、在application.propeties 文件中配置如下

3、运行

第三个监听器Order为3,但是却最早打印出来。原理类似于初始化器。DelegatingApplicationListener类里定义的Order为0

四、实现方式4

1、创建监听器类

@Order(4)
public class FourthListener implements SmartApplicationListener {

    @Override
    public boolean supportsEventType(Class<? extends ApplicationEvent> eventType) {
        return ApplicationStartedEvent.class.isAssignableFrom(eventType) ||
                ApplicationPreparedEvent.class.isAssignableFrom(eventType);
    }

    @Override
    public void onApplicationEvent(ApplicationEvent event) {
        System.out.println("hello fourth listener");
    }
}  

设置感兴趣的事件为ApplicationStartedEvent和ApplicationPreparedEvent

2、以追加的方式在application.properties配置

3、运行

可以发现打印了两次,因为它对ApplicationStartedEvent和ApplicationPreparedEvent两种事件感兴趣。

原文地址:https://www.cnblogs.com/linlf03/p/12332844.html

时间: 2024-11-24 22:34:18

SpringBoot自定义监听器的相关文章

安卓应用-自定义监听器2

现在说一下自定义监听器的第二种方法. 1.新建应用程序 2.定义接口Spy,同上一篇. package com.test.leetlelistener2; public interface Spy { public void Listening(); } 3.定义类Enemy package com.test.leetlelistener2; public class Enemy { public Spy spy; public int time = 10; Timer timer=new Ti

SpringBoot自定义Filter

SpringBoot自定义Filter SpringBoot自动添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,当然我们可以自定 义Filter. 自定义Filter需要两个步骤: 实现Filter[javax.servlet.Filter]接口,实现Filter方法 添加 @Configuration 注解,将自定义Filter加入过滤链 [过滤打印请求URL]实例代码如下: package xatu.zsl.Filter; i

springboot自定义错误页面

springboot自定义错误页面 1.加入配置: @Bean public EmbeddedServletContainerCustomizer containerCustomizer() { return (container -> { ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/401.html"); ErrorPage error404Page = new ErrorPage(Http

SpringBoot自定义配置项

SpringBoot自定义配置项 Spring Boot内置的配置项远远不能支撑我们的程序运行,在项目设计的时候,往往因为扩展性的需要,项目需要预留很多自定义设置项,Spring Boot允许我们配置自定义选项. 学习视频: http://www.itlaoqi.com/chapter/1685.html 源码地址: QQ群 814077650 , 群共享中自助下载 老齐的官网: itlaoqi.com (更多干货就在其中) 在 Spring Boot中,有两种方式使用自定义选项 @Value

springboot项目监听器不起作用

1.使用springboot项目,现在有个需求是在添加或者修改某个菜单后,菜单会影响角色,角色影响用户.所有受影响的用户在要退出重新登录. 自己实现的思路是这样的:写一个监听器,在收到某个特定的请求后,监听当前所有的用户,如果是受影响的用户,就销毁session,让重新登录. 有了思路后,刚开始上网搜的是怎么在spring boot中添加监听:网上大部分的思路都一样:使用@ServletComponentScan和一个实现了HttpSessionListener的方法就可以了.(参考:https

springboot 自定义Repository

启用 JpaRepositories package cn.xiaojf; import cn.xiaojf.today.data.rdb.repository.RdbCommonRepositoryImpl; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframewo

springboot自定义配置文件

前言:如果你一点spring的基础没有,建议你不要学习springboot,至少先有一个spring的项目经验或者自己搭建过spring的项目再学习springboot,这样你会发现在spring中搞不懂的,在springboot中得到一些答案.springboot的原则是"约定大于配置",所以在使用springboot的时候如果出现问题,没有一点基础,解决问题就很困难. 目标:将spring的容器中的配置:数据库的配置,定时器的配置转换到springboot中,实现spring与sp

微服务之springboot 自定义配置(一)Application.properties文件

配置的文件的格式 springboot可以识别两种格式的配置文件,分别是yml和properties 文件.我们可以将application.properties文件换成application.yml,这两个文件都可以被SpringBoot自动识别并加载,但是如果是自定义的配置文件,就最好还是使用properties格式的文件,因为SpringBoot中暂时还并未提供手动加载yml格式文件的功能(这里指注解方式). yml 配置文件 属性格式:配置的属性和属性值要有空格隔开.没有空格报:java

springboot自定义starter

1,创建一个空工程 2,new一个Modules  ---------------- maven (启动器) : springboottest-spring-boot-starter 3,new一个Modules  ---------------- spring(做自动配置的): springboottest-spring-boot-starter-autoconfigurer 4,启动器pom文件中引入自动配置模块: <!--启动器--> <dependencies> <!