SpringBoot中ApplicationListener事件监听有哪几种方式呢?

欣喜 SpringBoot 发布时间:2025-02-05 14:27:51 阅读数:9528 1
下文笔者讲述几种在SpringBoot中事件监听的实现方式,如下所示

SpringBoot事件监听的实现思路

方式1:
   向ApplicationContext中添加监听器
方式2:
   将监听器作为组件交给spring容器管理
方式3:   
   在application.properties中配置监听器context.listener.classes
方式4:
   使用@EventListener注解实现事件监听
方式5:
   通过配置spring.factories的方式注册事件
方式6:   
   通过实现接口org.springframework.context.ApplicationContextInitializer
     获取context
     然后通过相应的方法添加监听器	 

Event事件

import org.springframework.context.ApplicationEvent;

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

一、向ApplicationContext中添加监听器

public class TestListener1 implements ApplicationListener<TestEvent> {
    Logger logger = LoggerFactory.getLogger(TestListener1.class);

    @Override
    public void onApplicationEvent(TestEvent event) {
        logger.info(String.format("%s  监听到事件源:%s.", TestListener1.class.getName(), event.getSource()));
    }
}

spring上下文中加入监听器

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
        //装载监听
        context.addApplicationListener(new TestListener1());
        context.publishEvent(new TestEvent("启动时作出如下动作!"));
    }
}

将监听器组件交给spring容器管理

@Component
public class TestListener2 implements ApplicationListener<TestEvent> {
    Logger logger = LoggerFactory.getLogger(TestListener2.class);

    @Override
    public void onApplicationEvent(TestEvent event) {
        logger.info(String.format("%s  监听到事件源:%s.", TestListener2.class.getName(), event.getSource()));

    }
}

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
        context.publishEvent(new TestEvent("启动时作出如下动作!"));
}

在application.properties中配置监听器context.listener.classes

public class TestListener3 implements ApplicationListener<TestEvent> {
    Logger logger = LoggerFactory.getLogger(TestListener3.class);

    @Override
    public void onApplicationEvent(TestEvent event) {
        logger.info(String.format("%s  监听到事件源:%s.", TestListener3.class.getName(), event.getSource()));
    }
}

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
        context.publishEvent(new TestEvent("启动时作出如下动作!"));
}

使用@EventListener注解实现事件监听

@Component
public class TestListener4 {
    Logger logger = LoggerFactory.getLogger(TestListener4.class);

    @EventListener
    public void onApplicationEvent(TestEvent event) {
        logger.info(String.format("%s  监听到事件源:%s.", TestListener4.class.getName(), event.getSource()));

    }
}


@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
        context.publishEvent(new TestEvent("启动时作出如下动作!"));
}

配置spring.factories

public class TestListener5 implements ApplicationListener<TestEvent> {
    Logger logger = LoggerFactory.getLogger(TestListener5.class);

    @Override
    public void onApplicationEvent(TestEvent event) {
        logger.info(String.format("%s  监听到事件源:%s.", TestListener5.class.getName(), event.getSource()));
    }
}

 
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(Application.class,args);
        context.publishEvent(new TestEvent("启动时作出如下动作!"));
}

借助实现接口org.springframework.context.ApplicationContextInitializer,获取context

public class TestListener6 implements ApplicationListener<TestEvent> , ApplicationContextInitializer {
    Logger logger = LoggerFactory.getLogger(TestListener6.class);

    @Override
    public void onApplicationEvent(TestEvent event) {
        logger.info(String.format("%s  监听到事件源:%s.", TestListener6.class.getName(), event.getSource()));
    }

    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
        applicationContext.addApplicationListener(new TestListener6());
    }
}

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication springApplication = new SpringApplication(Application.class);
        springApplication.addInitializers(new TestListener6());
        ConfigurableApplicationContext context = springApplication.run(args);
        //发布事件
        context.publishEvent(new TestEvent("启动时作出如下动作!"));
    }
}
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/SpringBoot/202502/8281.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者