我们模拟邮件发送来讲解事件的整个过程。
我们要讲解事件,首先我们需要定义一个事件。
MailSendEvent.java
package spring3.event.mailSend;
import org.springframework.context.ApplicationContext;
import org.springframework.context.event.ApplicationContextEvent;
public class MailSendEvent extends ApplicationContextEvent {
private String toAddress;
public MailSendEvent(ApplicationContext source, String toAddress) {
super(source);
this.toAddress = toAddress;
}
public String getToAddress() {
return this.toAddress;
}
}
现在,我们有了事件,我们需要一个监听器来监听我们事件。
MailSendListener.java
package spring3.event.mailSend; import org.springframework.context.ApplicationListener; public class MailSendListener implements ApplicationListener<MailSendEvent> { @Override public void onApplicationEvent(MailSendEvent event) { // 只允许给xy@126.com发信,哈哈 String toAddress = event.getToAddress(); if ("xy@126.com".equalsIgnoreCase(toAddress)) { System.out.print("给xy@126.com发信"); } else { System.out.print("不允许给" + toAddress + "发信"); } } }
事件和事件监听器都有了,那么接下来我们应该发布事件,要不事件和监听器就白写了。
MailSender.java
package spring3.event.mailSend; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; public class MailSender implements ApplicationContextAware { private ApplicationContext context; @Override public void setApplicationContext(ApplicationContext context) throws BeansException { this.context = context; } public void sendMail(String toAddress) { System.out.println("开始发送邮件..."); MailSendEvent event = new MailSendEvent(this.context, toAddress); this.context.publishEvent(event); } }
接下来我们在xml里面配置监听器和事件发布器,让spring启动时知道他们存在。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean class="spring3.event.mailSend.MailSendListener"/> <bean id="mailSender" class="spring3.event.mailSend.MailSender"/> </beans>
测试
package spring3.event.mailSend; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class EventTest { /** * @param args */ public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("spring3/event/mailSend/spring_event.xml"); MailSender sender = (MailSender)ctx.getBean("mailSender"); sender.sendMail("xy@126.com"); sender.sendMail("xy111@126.com"); } }
测试结果:
开始发送邮件... 给xy@126.com发信开始发送邮件... 不允许给xy111@126.com发信
相关推荐
在本文中,我们将深入探讨Spring事件驱动模型,理解其工作原理,并通过源码分析来深化认识。 首先,Spring事件驱动模型是基于观察者模式实现的,即发布者(Publisher)发布事件,订阅者(Subscriber)监听并处理...
5. **Spring Cloud Bus**:事件、消息总线,可以广播配置更改,也可以用于微服务间的通信。 6. **Feign**:声明式服务调用,通过接口定义来简化服务间调用的编写。 7. **Spring Cloud LoadBalancer**:负载均衡器...
Spring事件监听机制是Spring框架中的一个重要特性,它基于经典的观察者模式,允许应用程序组件之间进行松耦合的通信。在Spring中,事件监听机制由三部分组成:事件(ApplicationEvent)、事件监听器(Application...
"SpringCloud第二季脑图.rar"很可能包含周阳老师关于SpringCloud的系统性学习路径和关键概念的图表化表示,这对于理解和掌握SpringCloud的架构和组件非常有帮助。 1. **Spring Cloud Eureka**:Eureka是服务注册与...
这些是Spring框架的最新版本,Spring Boot的第二个主要版本,以及用于构建微服务架构的Spring Cloud。 首先,Spring 5是Java开发者广泛使用的开源框架,它的主要改进包括对Java 8及更高版本的全面支持、反应式编程...
6. **Spring Cloud Bus**:用于在集群中传播事件,例如配置更新的广播。 7. **Spring Cloud Sleuth**:分布式跟踪,整合Zipkin或ELK Stack进行链路追踪。 8. **Spring Cloud Stream**:处理消息驱动的应用,支持...
在本项目中,我们将深入探讨如何将Spring Cloud与流程引擎Activiti5进行集成,并重点关注事件网关、定时事件和信号事件的使用。Spring Cloud提供了一种微服务架构下的服务发现、配置管理和负载均衡等功能,而...
最后,Spring5的事件驱动模型(Event-driven Model)也是值得关注的部分,它允许应用组件之间通过发布和订阅事件来进行通信。文档会讲解ApplicationEvent和ApplicationListener接口的使用,以及自定义事件的发布和...
4 Spring4 扩展分析(二)21:11 5 Spring Boot 快速入门24:01 6 Spring Boot 配置分析(一)38:26 7 Spring Boot 配置分析(二)35:47 8 Spring Boot 自动配置32:44 9 Spring Boot @Enable*注解的工作原理47:07...
Bean Factory负责对象的创建、管理与装配,而ApplicationContext则在Bean Factory的基础上增加了更多企业级服务,如消息源、国际化、事件发布等。 三、依赖注入(Dependency Injection) 依赖注入是Spring的核心...
二:服务介绍: 1) 服务的注册与发现 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、...
此外,`ApplicationContext`还提供了一个更为丰富的API,支持事件广播等功能。 - **应用场景**: - 在实际开发中,由于`ApplicationContext`提供了更多实用的功能,因此更常被使用。例如,在Web应用中,通常会选择...
- 下载最新版本的Spring Boot CLI二进制文件并解压。 - **10.2.2. 使用SDKMAN进行安装** - 安装SDKMAN并通过它来管理Spring Boot CLI版本。 - **10.2.3. 使用OSX Homebrew进行安装** - 如果你使用的是macOS操作...
#### 二、Spring框架的核心组件 1. **Spring Core**:提供了框架的基本功能,包括 IoC 容器和依赖注入等功能。 2. **Spring Context**:构建于核心之上,提供了支持国际化、事件传播、资源加载和验证等功能。 3. **...
ApplicationEvent和ApplicationListener接口让我们可以在Spring应用中实现事件的发布和监听,这是实现松耦合和组件间通信的有效手段。 通过深入阅读和分析Spring源码,不仅可以提升我们的技术能力,还能培养我们对...
#### 二、Spring Data MongoDB的核心概念 - **Spring Data MongoDB** 基于 **Spring Framework** 和 **MongoDB** 构建,主要由以下几个核心概念组成: - **Repository**: 提供了一种方式来定义和实现数据访问逻辑。...
1. **事件(Event)**:在Spring Cloud Bus中,事件是一种消息类型,用于在系统中传递信息。当某个微服务发生特定事件时,如配置更新,它会发布一个事件到总线上,其他订阅了该事件的微服务会接收到这个消息并作出...
二、SpringSession的核心概念 1. **SessionRepository**:这是SpringSession的核心接口,用于保存和检索Session对象。你可以根据需要选择不同的实现,如RedisSessionRepository、MongoSessionRepository等。 2. **...
#### 二、事件处理的核心概念 在Spring框架中,事件处理主要涉及到以下几个核心概念: 1. **ApplicationEvent**:这是一个抽象类,所有自定义事件都必须继承它。它用于表示一个应用程序级别的事件。 2. **...