通过模拟邮件的发送,说明Spring的事件监听机制

事件类

 package org.zln.module_chapter2.event;

 import org.springframework.context.ApplicationContext;
import org.springframework.context.event.ApplicationContextEvent; /**
* 发送邮件事件类
* Created by sherry on 000005/7/5 22:10.
*/ public class MailSendEvent extends ApplicationContextEvent { private String to;
public MailSendEvent(ApplicationContext source,String to) {
super(source);
this.to = to;
} public String getTo(){
return this.to;
}
}

D:\GitHub\tools\JavaEEDevelop\Lesson17_JavaWebDemo\src\org\zln\module_chapter2\event\MailSendEvent.java

事件监听类

 package org.zln.module_chapter2.event;

 import org.springframework.context.ApplicationListener;

 /**
* 邮件发送 监听类
* Created by sherry on 000005/7/5 22:12.
*/ public class MailSendListener implements ApplicationListener<MailSendEvent> { /*对MailSendEvent进行处理*/
@Override
public void onApplicationEvent(MailSendEvent mailSendEvent) {
MailSendEvent mailSendEvent1 = mailSendEvent;
System.out.println("MailSendListener:向"+mailSendEvent1.getTo()+"发送一封邮件");
}
}

D:\GitHub\tools\JavaEEDevelop\Lesson17_JavaWebDemo\src\org\zln\module_chapter2\event\MailSendListener.java

事件动作

 package org.zln.module_chapter2.event;

 import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; /**
* 邮件发送类
* Created by sherry on 000005/7/5 22:15.
*/
public class MailSender implements ApplicationContextAware{
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
} public void sendMail(String to){
System.out.println("MailSender:模拟发送邮件");
MailSendEvent mailSendEvent = new MailSendEvent(applicationContext,to);
/*向容器中所有事件监听器发送事件*/
applicationContext.publishEvent(mailSendEvent);
}
}

D:\GitHub\tools\JavaEEDevelop\Lesson17_JavaWebDemo\src\org\zln\module_chapter2\event\MailSender.java

事件注册

    <!--事件-->
<bean class="org.zln.module_chapter2.event.MailSendListener"/>
<bean id="mailSender" class="org.zln.module_chapter2.event.MailSender"/>

测试

package org.zln.module_chapter2.event;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import static org.junit.Assert.*; @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/org/zln/cfg/spring/applicationContext.xml"})/*启动Spring容器*/
public class MailSenderTest { @Autowired
@Qualifier("mailSender")
private MailSender mailSender; @Test
public void testSetApplicationContext() throws Exception { } @Test
public void testSendMail() throws Exception {
mailSender.sendMail("nbzlnzlq@126.com");
}
}

D:\GitHub\tools\JavaEEDevelop\Lesson17_JavaWebDemo\test\org\zln\module_chapter2\event\MailSenderTest.java

Spring 事件机制的更多相关文章

  1. Spring事件机制详解

    一.前言 说来惭愧,对应Spring事件机制之前只知道实现 ApplicationListener 接口,就可以基于Spring自带的事件做一些事情(如ContextRefreshedEvent),但 ...

  2. 深入理解Spring事件机制(一):广播器与监听器的初始化

    前言 Spring 从 3.x 开始支持事件机制.在 Spring 的事件机制中,我们可以令一个事件类继承 ApplicationEvent 类,然后将实现了 ApplicationListener ...

  3. spring事件机制

    前置知识补充: 程序里面所谓的“上下文”就是程序的执行环境,打个比方:你就相当于web程序,你的房子就相当于web程序的上下文,你可以在家里放东西,也可以取东西,你的衣食住行都依赖这个房子,这个房子就 ...

  4. 搞清楚Spring事件机制后:Spring的源码看起来简单多了

    本文主讲Spring的事件机制,意图说清楚: 什么是观察者模式? 自己实现事件驱动编程,对标Spring的事件机制 彻底搞懂Spring中的事件机制,从而让大家 本文内容较长,代码干货较多,建议收藏后 ...

  5. 观察者模式之spring事件机制

    ddsspring中的事件机制使用到设计模式中的观察者模式 ,观察者模式有两个概念,1.观察者.被观察者.2.被观察者做出相应得动作,观察者能接收到.不分析设计模式,学习下spring中的事件机制实际 ...

  6. Spring的事件机制详解

    同步事件和异步事件 同步事件:在一个线程里,按顺序执行业务,做完一件事再去做下一件事. 异步事件:在一个线程里,做一个事的同事,可以另起一个新的线程执行另一件事,这样两件事可以同时执行. 用一个例子来 ...

  7. Spring 中的事件机制

    说到事件机制,可能脑海中最先浮现的就是日常使用的各种 listener,listener去监听事件源,如果被监听的事件有变化就会通知listener,从而针对变化做相应的动作.这些listener是怎 ...

  8. Spring 事件监听机制及原理分析

    简介 在JAVA体系中,有支持实现事件监听机制,在Spring 中也专门提供了一套事件机制的接口,方便我们实现.比如我们可以实现当用户注册后,给他发送一封邮件告诉他注册成功的一些信息,比如用户订阅的主 ...

  9. Spring事件解析

    首先介绍Spring事件相关类的关系: 其中EventListener与EventObject均是Java SE的范畴,源码如下: package java.util; public interfac ...

随机推荐

  1. 当Java遇见了Html--Jsp详解篇

    ###一.什么是Jsp jsp是一种基于文本的程序,全名java server page,其特点是html和java程序共存.执行时jsp会被运行容器编译,编译后的jsp跟servlet一样,因此js ...

  2. 瓣呀,一个基于豆瓣api仿网易云音乐的开源项目

    整体采用material design 风格,本人是网易云音乐的粉丝,所以界面模仿了网页云音乐,另外,项目中尽量使用了5.0之后的新控件. 项目整体采用mvp+rxjava+retrofit 框架,使 ...

  3. windows tensorflow 简单安装

    需要64位系统windows, 下载64位的python3.5 官网下载地址:https://www.python.org/downloads/release/python-352/ 百度云下载地址: ...

  4. 【赛时总结】◇赛时·VI◇ Atcoder ABC-104

    ◇赛时·VI◇ ABC-104 ◆??? 莫名爆炸……ABC都AK不了 QwQ C题竟然沦落到卡数据的地步:D题没有思路,直接放弃 ⋋( ◕ ∧ ◕ )⋌ ◆ 题目&解析 ◇A题◇ Rated ...

  5. 列表,元组的操作,for循环

    1.列表 # li = ["wang","jian","wei"] # print(li) # 结果:['wang', 'jian', 'w ...

  6. SqlServer2008/2005数据库日志收缩

    1.SQL2008数据库USE [master]GOALTER DATABASE 数据库名称 SET RECOVERY SIMPLE WITH NO_WAITALTER DATABASE 数据库名称 ...

  7. yii2 url 美化参数

    所谓的url参数美化就是将冗长的字符串 进行正则替换 yii2 框架的url参数美化完成需要完成两个阶段 第一个阶段分apache和nginx 两种的配置 apache :1.1 必须开启rewrit ...

  8. 解决SecureCRT远程Linux遇到文件不能直接往CRT里直接拖入的问题

    不能拖入到CRT的第一个原因可能是Options-->Global Options-->Terminal中的Mouse下的Copy on select没有勾选.当发现自己勾选了也不能往里面 ...

  9. [Luogu3806]点分治

    询问树上是否存在距离为k[i]的点对 直接点分治把所有距离预处理出来,然后O(1)回答即可 Code #include <cstdio> #include <algorithm> ...

  10. 11 Django组件-分页器

    Django的分页器(paginator) view from django.shortcuts import render,HttpResponse # Create your views here ...