Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法

ApplicationListener监听器 中的ApplicationContext ,它可不得了,它是IOC容器的高级模式,它是BeanFactory的拓展,他能管理Bean的生命周期,它能提供多种配置载入方式如(XML,注解等),它能自动装配Bean之间的依赖关系,它内置AOP支持,当然它也支持我们所讲的事件监听机制。监听器顾名思义,它得监听点什么,就像老奶奶一样支楞着耳朵打听一些事情一样,它也要监听一些事件,它既然是在context包下,那么它也肯定和context有关。方法完成的,该方法会初始化剩下的单例Beans,包括事件监听器。 阅读详情

什么是ApplicationContext?
它是Spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。
ApplicationContext则是应用的容器。

Spring把Bean(object)放在容器中,需要用就通过get方法取出来。

 

ApplicationEvent

是个抽象类,里面只有一个构造函数和一个长整型的timestamp。

ApplicationListener

是一个接口,里面只有一个onApplicationEvent方法。

所以自己的类在实现该接口的时候,要实装该方法。


如果在上下文中部署一个实现了ApplicationListener接口的bean,

那么每当在一个ApplicationEvent发布到 ApplicationContext时,
这个bean得到通知。其实这就是标准的Oberver设计模式。

下面给出例子:

首先创建一个ApplicationEvent实现类:

package com.spring.event;

import org.springframework.context.ApplicationEvent;

/**
 * <p>Class:EmailListEvent</p>
 * <p>Description:</p>
 * @author Liam
 * @Date [2012-9-7 上午8:42:07]
 */
public class EmailEvent extends ApplicationEvent {
	/**
	 * <p>Description:</p>
	 */
	private static final long serialVersionUID = 1L;
	public String address;  
	public String text;
	
	public EmailEvent(Object source) {
		super(source);
	}
	
	public EmailEvent(Object source, String address, String text) {
		super(source);
		this.address = address;
		this.text = text;
	}
	
	public void print(){
		System.out.println("hello spring event!");
	}

}

给出监听器:

package com.spring.event;

import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;

/**
 * <p>Class:EmailListener</p>
 * <p>Description:</p>
 * @author Liam
 * @Date [2012-9-7 上午8:44:53]
 */
public class EmailListener implements ApplicationListener {

	public void onApplicationEvent(ApplicationEvent  event) {
		if(event instanceof EmailEvent){
			EmailEvent emailEvent = (EmailEvent)event;
			emailEvent.print();
			System.out.println("the source is:"+emailEvent.getSource());
			System.out.println("the address is:"+emailEvent.address);
			System.out.println("the email's context is:"+emailEvent.text);
		}
		
	}

}

applicationContext.xml文件配置:

<bean id="emailListener" class="com.spring.event.EmailListener"></bean>

测试类:

package com.spring.event;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * <p>Class:Test</p>
 * <p>Description:</p>
 * @author Liam
 * @Date [2012-9-6 上午10:41:34]
 */
public class Test {
	public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
        
        //HelloBean hello = (HelloBean) context.getBean("helloBean");
        //hello.setApplicationContext(context);
        EmailEvent event = new EmailEvent("hello","boylmx@163.com","this is a email text!");
        context.publishEvent(event);
        //System.out.println();
    }
}
测试结果:
hello spring event!
the source is:hello
the address is:boylmx@163.com
the email's context is:this is a email text!


        
【spring】 ApplicationListener的使用及原理简析 ApplicationListener 是spring提供的一个监听器,它可以实现一个简单的发布-订阅功能,用有点外行但最简单通俗的话来解释:监听到主业务在执行到了某个节点之后,在监听器里面做出相应的其它业务变更。下面我们具体看段代码,则能很快的理解 阅读详情

相关推荐

Spring Boot 监听器详解

SpringApplicationRunListener 是SpringApplication 的运行监听器,提供Spring Boot启动时各个运行状态的监听,可以在应用程序启动的时候执行一些自定义操作或记录一些信息。SpringApplicationRunListener 在run中加载。是Spring 提供的上下文监听器,可用于监听指定感兴趣的事件。最后还是用一张图来总结整个流程作者其他文章:Prometheus 系列文章Prometheus 的介绍和安装。

分享技术干货和灵感、推荐新书和好玩的项目、分享Java面试题 8817

SpringApplication-ApplicationListener生命周期的事件(Event)体系

SpringApplication-ApplicationListener生命周期的事件(Event)体系

Jaemon 1217

光伏发电系统模拟及其发电预测开源python工具pvlib

本文介绍光伏发电系统模拟及其发电预测开源python工具pvlib,以及举例介绍获取辐照度方法、光伏发电预测思路。

肖永威的专栏 1万+

Spring Boot 2.0新增事件ApplicationStartedEvent

事件的优先级顺序 ApplicationStartingEvent ApplicationEnvironmentPreparedEvent ApplicationPreparedEvent ApplicationStartedEvent <= 新增的事件 ApplicationReadyEvent ApplicationFailedEvent @Slf4j public class StartEventListener implements ApplicationListener<Appl

晴空马仔的博客 2226

免费AI视频生成全流程:通义千问+Seedance 2.5+Grok实战指南

AI视频生成正在成为内容创作的重要方式,但高昂的API费用常让个人创作者望而却步。实际上,通过合理组合云端免费工具,也能搭建一条完整的视频生产链路:利用大模型生成脚本,用视频生成模型将文本渲染成画面,再借助多模态模型进行一致性校验。这种“文本+视频+多模态”的协作模式,将复杂的生成任务解耦为可独立调用的模块,既降低了本地硬件要求,也为批量内容验证提供了低成本方案。该流程适用于短视频素材快速产出、产品Demo验证以及AI应用集成等场景,核心在于打通免费账号、API调用与批量任务调度。本文以通义千问、Seeda

weixin_29044157的博客 377

信息安全-入侵检测技术原理与应用

入侵检测技术原理与应用、入侵检测概述、入侵检测技术、入侵检测系统组成与分类、入侵检测系统主要产品与技术指标、入侵检测系统应用

我的个人博客 1万+

Spring的监听事件ApplicationListener和ApplicationEvent及@EventListener用法

什么是ApplicationContext?  它是spring的核心,Context我们通常解释为上下文环境,但是理解成容器会更好些。  ApplicationContext则是应用的容器。 Spring把Bean(object)放在容器中,需要用就通过get方法取出来。   ApplicationEvent 是个抽象类,里面只有一个构造函数和一个长整型的timestamp。

andyzhaojianhui的专栏 1万+

别急着编译!修复银河麒麟OpenSSH漏洞前,先搞懂ssh、sshd版本与apt仓库的“爱恨情仇”

本文深度解析银河麒麟OpenSSH漏洞(CVE-2023-38408)修复策略,揭示版本差异背后的企业级维护逻辑,提供从APT升级到源码编译的多维度方案评估。特别针对路径隔离方案和离线环境处理给出技术细节,帮助企业制定兼顾安全与稳定的升级决策框架。

weixin_26642481的博客 453

Spring 的监听事件 ApplicationListener 和 ApplicationEvent 用法及调用过程详解

ApplicationListener调用过程详解: https://blog.youkuaiyun.com/u014263388/article/details/78996509 使用场景 在一些业务场景中,当容器初始化完成之后,需要处理一些操作,比如一些数据的加载、初始化缓存、特定任务的注册等等。这个时候我们就可以使用Spring提供的ApplicationListener来进行操作。 用法 本文以...

quliuwuyiz的博客 1712

恒玄BES2700ZP开发实战:从零搭建嵌入式音频系统

本文详细介绍了恒玄BES2700ZP蓝牙音频SoC的开发实战,从环境搭建、SDK架构解析到蓝牙音频、AI语音集成及低功耗优化。重点探讨了如何利用其多核架构实现高性能音频处理和LE Audio支持,为开发者提供从零构建嵌入式音频系统的完整指南。

o1p2q3r的博客 918

MATLAB 图像滤波:高通、低通、带通和方向滤波器

在 MATLAB 中,我们可以使用不同类型的滤波器对图像进行处理,包括高通滤波器、低通滤波器、带通滤波器和方向滤波器。通过以上代码示例,我们介绍了 MATLAB 中使用高通滤波器、低通滤波器、带通滤波器和方向滤波器对图像进行滤波的方法。高斯滤波器可以实现带通滤波效果,通过调整滤波器的方差参数可以控制带通滤波器的频率范围。这里的平均滤波器是一种常见的低通滤波器,通过对图像周围的像素进行平均来实现平滑效果。Sobel 滤波器是一种常用的方向滤波器,用于检测图像中的水平和垂直边缘。函数将高通滤波器应用于图像。

CyberSparkZ的博客 1394
上一篇: Spring3.1.2 提供的类型转换支持
下一篇: Spring实现Aware接口,完成对IOC容器的感知
努力突破
博客等级 码龄17年 36粉丝 113原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值