ApplicationListener事件发布订阅

2023-11-22 14:04:16 浏览数 (1)

java org.springframework.context.ApplicationListener类的作用

org.springframework.context.ApplicationListener 是一个 Spring Framework 中的接口,用于监听应用程序中的事件。当应用程序中发生事件时,实现了 ApplicationListener 接口的类可以被 Spring Framework 自动调用,以响应该事件。

具体来说,ApplicationListener 可以监听 Spring Framework 中的多种事件,包括上下文加载完成事件、Bean 初始化完成事件、Web 请求处理完成事件等。通过实现 ApplicationListener 接口,开发人员可以在应用程序中添加自定义的事件监听器,以便在特定的事件发生时执行特定的操作。

举个例子

当一个 Spring 应用程序的上下文加载完成时,可以使用 ApplicationListener 来执行一些初始化操作。例如,假设我们有一个名为 MyApplicationListener 的类实现了 ApplicationListener<ContextRefreshedEvent> 接口,它可以监听上下文加载完成事件。

代码语言:java复制
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;

public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        // 在上下文加载完成时执行的操作
        System.out.println("应用程序上下文加载完成!");
        // 执行其他初始化操作...
    }
}

在上述示例中,当应用程序的上下文加载完成时,onApplicationEvent 方法将被调用,并输出一条消息"应用程序上下文加载完成!"。开发人员可以在该方法中执行一些初始化操作,例如加载配置文件、初始化数据库连接等。

要使用该监听器,可以在 Spring 配置文件中将其声明为一个 Bean,并将其注册为一个监听器:

代码语言:html复制
<bean id="myApplicationListener" class="com.example.MyApplicationListener" />

这样,在应用程序启动时,Spring Framework 将自动创建并注册该监听器,并在上下文加载完成时调用它的 onApplicationEvent 方法。

如何手动注册事件

要手动注册事件,可以使用 Spring Framework 提供的 ApplicationEventPublisher 接口。该接口定义了一个 publishEvent 方法,可以用于发布自定义事件。

以下是一个简单的示例,展示如何手动注册事件:

代码语言:java复制
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;

public class MyEventPublisher implements ApplicationEventPublisherAware {

    private ApplicationEventPublisher eventPublisher;

    @Override
    public void setApplicationEventPublisher(ApplicationEventPublisher eventPublisher) {
        this.eventPublisher = eventPublisher;
    }

    public void publishMyEvent(Object source, String message) {
        MyEvent event = new MyEvent(source, message);
        eventPublisher.publishEvent(event);
    }
}

在上述示例中,MyEventPublisher 类实现了 ApplicationEventPublisherAware 接口,从而可以获取 ApplicationEventPublisher 实例。该类还定义了一个 publishMyEvent 方法,用于发布自定义事件。

要使用该事件发布器,可以在应用程序中创建一个实例,并调用其 publishMyEvent 方法来发布自定义事件:

代码语言:java复制
MyEventPublisher publisher = new MyEventPublisher();
publisher.publishMyEvent(this, "Hello, world!");

在上述示例中,我们创建了一个 MyEventPublisher 实例,并调用其 publishMyEvent 方法来发布一个自定义事件。该事件的源对象为 this,消息为"Hello, world!"。开发人员可以根据需要自定义事件的源对象和消息内容。

MyEvent可以自己配置需要继承ApplicationEvent类,监听的时候配置ApplicationListener<MyEvent>泛型即可,当触发了事件会调用监听。或者也可以使用ApplicationContext#publishEvent调用方法效果一样的。

最后

点赞关注评论一键三连,欢迎关注公众号【i查拉图斯特拉如是说】每周分享技术干货、开源项目、实战经验、国外优质文章翻译等,您的关注将是我的更新动力!

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞