`
xieyan30
  • 浏览: 49103 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

spring事件(二)

 
阅读更多

我们模拟邮件发送来讲解事件的整个过程。

我们要讲解事件,首先我们需要定义一个事件。

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发信

 

0
2
分享到:
评论

相关推荐

    详解Spring事件驱动模型

    在本文中,我们将深入探讨Spring事件驱动模型,理解其工作原理,并通过源码分析来深化认识。 首先,Spring事件驱动模型是基于观察者模式实现的,即发布者(Publisher)发布事件,订阅者(Subscriber)监听并处理...

    尚硅谷SpringCloud第二季笔记

    5. **Spring Cloud Bus**:事件、消息总线,可以广播配置更改,也可以用于微服务间的通信。 6. **Feign**:声明式服务调用,通过接口定义来简化服务间调用的编写。 7. **Spring Cloud LoadBalancer**:负载均衡器...

    深入探索Spring事件监听机制:技术与应用

    Spring事件监听机制是Spring框架中的一个重要特性,它基于经典的观察者模式,允许应用程序组件之间进行松耦合的通信。在Spring中,事件监听机制由三部分组成:事件(ApplicationEvent)、事件监听器(Application...

    SpringCloud第二季脑图.rar

    "SpringCloud第二季脑图.rar"很可能包含周阳老师关于SpringCloud的系统性学习路径和关键概念的图表化表示,这对于理解和掌握SpringCloud的架构和组件非常有帮助。 1. **Spring Cloud Eureka**:Eureka是服务注册与...

    spring 5 , Spring Boot 2.0,Spring cloud

    这些是Spring框架的最新版本,Spring Boot的第二个主要版本,以及用于构建微服务架构的Spring Cloud。 首先,Spring 5是Java开发者广泛使用的开源框架,它的主要改进包括对Java 8及更高版本的全面支持、反应式编程...

    Spring和SpringCloud视频

    6. **Spring Cloud Bus**:用于在集群中传播事件,例如配置更新的广播。 7. **Spring Cloud Sleuth**:分布式跟踪,整合Zipkin或ELK Stack进行链路追踪。 8. **Spring Cloud Stream**:处理消息驱动的应用,支持...

    Spring cloud和流程引擎activiti5整合代码二,事件网关,定时事件和信号事件

    在本项目中,我们将深入探讨如何将Spring Cloud与流程引擎Activiti5进行集成,并重点关注事件网关、定时事件和信号事件的使用。Spring Cloud提供了一种微服务架构下的服务发现、配置管理和负载均衡等功能,而...

    Spring5 源码分析(第 2 版)-某Tom老师

    最后,Spring5的事件驱动模型(Event-driven Model)也是值得关注的部分,它允许应用组件之间通过发布和订阅事件来进行通信。文档会讲解ApplicationEvent和ApplicationListener接口的使用,以及自定义事件的发布和...

    Spring Boot实战与原理分析视频课程包含14-18

    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...

    Spring框架开发参考中文手册

    Bean Factory负责对象的创建、管理与装配,而ApplicationContext则在Bean Factory的基础上增加了更多企业级服务,如消息源、国际化、事件发布等。 三、依赖注入(Dependency Injection) 依赖注入是Spring的核心...

    springCloud

    二:服务介绍: 1) 服务的注册与发现 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、...

    Spring高级篇二.pdf

    此外,`ApplicationContext`还提供了一个更为丰富的API,支持事件广播等功能。 - **应用场景**: - 在实际开发中,由于`ApplicationContext`提供了更多实用的功能,因此更常被使用。例如,在Web应用中,通常会选择...

    十分钟上手spring boot

    - 下载最新版本的Spring Boot CLI二进制文件并解压。 - **10.2.2. 使用SDKMAN进行安装** - 安装SDKMAN并通过它来管理Spring Boot CLI版本。 - **10.2.3. 使用OSX Homebrew进行安装** - 如果你使用的是macOS操作...

    spring教程+电子书

    #### 二、Spring框架的核心组件 1. **Spring Core**:提供了框架的基本功能,包括 IoC 容器和依赖注入等功能。 2. **Spring Context**:构建于核心之上,提供了支持国际化、事件传播、资源加载和验证等功能。 3. **...

    Tom_深入分析Spring源码

    ApplicationEvent和ApplicationListener接口让我们可以在Spring应用中实现事件的发布和监听,这是实现松耦合和组件间通信的有效手段。 通过深入阅读和分析Spring源码,不仅可以提升我们的技术能力,还能培养我们对...

    Spring Data MongoDB中文文档

    #### 二、Spring Data MongoDB的核心概念 - **Spring Data MongoDB** 基于 **Spring Framework** 和 **MongoDB** 构建,主要由以下几个核心概念组成: - **Repository**: 提供了一种方式来定义和实现数据访问逻辑。...

    spring-cloud-bus:Spring Cloud事件总线

    1. **事件(Event)**:在Spring Cloud Bus中,事件是一种消息类型,用于在系统中传递信息。当某个微服务发生特定事件时,如配置更新,它会发布一个事件到总线上,其他订阅了该事件的微服务会接收到这个消息并作出...

    Spring中自定义session管理,SpringSession的使用

    二、SpringSession的核心概念 1. **SessionRepository**:这是SpringSession的核心接口,用于保存和检索Session对象。你可以根据需要选择不同的实现,如RedisSessionRepository、MongoSessionRepository等。 2. **...

    Spring中ApplicationContext对事件传递

    #### 二、事件处理的核心概念 在Spring框架中,事件处理主要涉及到以下几个核心概念: 1. **ApplicationEvent**:这是一个抽象类,所有自定义事件都必须继承它。它用于表示一个应用程序级别的事件。 2. **...

Global site tag (gtag.js) - Google Analytics