1.测试程序EventTest.java,发布一个事件只需要调用FrameEventHolder.publishEvent()方法即可。

 package com.junge.spring.event;

 import com.junge.spring.vo.Mail;

 public class EventTest {

     /**
* @param args
*/
public static void main(String[] args) {
FrameEvent frameEvent = new FrameEvent(); Mail mail = new Mail();
mail.setContent("accdddount");
mail.setEmail("333@email.com"); frameEvent.setPrameter(mail);
frameEvent.setEventId("send_mail_notify");
frameEvent.setSync(false); FrameEventHolder.publishEvent(frameEvent);
} }

2.应用上下文保持器ContextHolder.java

 /**
*
*/
package com.junge.spring.context; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* @author Administrator
*
*/
public class ContextHolder { private static ApplicationContext context = null; static {
context = new ClassPathXmlApplicationContext("event.xml");
} public static ApplicationContext getApplicationContext() {
return context;
}
}

3.事件类FrameEvent.java,继承自Spring的ApplicationEvent,可以保持事件处理参数

 /**
*
*/
package com.junge.spring.event; import org.springframework.context.ApplicationEvent; /**
* @author Administrator
*
*/
public class FrameEvent extends ApplicationEvent { private static final long serialVersionUID = 1L; /**
* 保持事件业务参数
*/
private Object prameter; /**
* 一类事件编号
*/
private String eventId; public FrameEvent() {
super("source");
} public FrameEvent(Object source) {
super(source);
} public Object getPrameter() {
return prameter;
} public void setPrameter(Object prameter) {
this.prameter = prameter;
} public String getEventId() {
return eventId;
} public void setEventId(String eventId) {
this.eventId = eventId;
} }

4.发布事件静态方法 FrameEventHolder.java

package com.junge.spring.event;

import org.springframework.util.Assert;

import com.junge.spring.context.ContextHolder;

public class FrameEventHolder {

	public static void publishEvent(FrameEvent frameEvent) {

		Assert.notNull(frameEvent);

		ContextHolder.getApplicationContext().publishEvent(frameEvent);
} }

5.事件处理接口EventHandler.java

 package com.junge.spring.event.handler;

 public interface EventHandler {

     /**
* 获取事件ID
*/
String getEventId(); /**
* 处理事件入口
*
* @param parameter
*/
void handle(Object parameter); }

6.事件处理接口抽象类FrameEventHandler.java,业务事件处理从该类继承

 /**
*
*/
package com.junge.spring.event.handler; /**
* @author Administrator
*
*/
public abstract class FrameEventHandler implements EventHandler { private String eventId; /**
* @param eventId
* the eventId to set
*/
public void setEventId(String eventId) {
this.eventId = eventId;
} /*
* (non-Javadoc)
*
* @see com.junge.spring.event.listener.EventHandler#getEventId()
*/
@Override
public String getEventId() { return eventId;
}
}

7.业务事件处理实现MailEventHandler.java,从FrameEventHandler.java继承,实现handle方法

 /**
*
*/
package com.junge.spring.event.handler; import com.junge.spring.vo.Mail; /**
* @author Administrator
*
*/
public class MailEventHandler extends FrameEventHandler { @Override
public void handle(Object parameter) {
if (null != parameter) {
Mail mail = (Mail) parameter;
System.out.println("需要发送邮件给" + mail.getEmail() + ",邮件内容是:"
+ mail.getContent());
} } }

8.事件监听器FrameEventListener.java,调用事件业务处理逻辑(即调用handle方法)

 /**
*
*/
package com.junge.spring.event.listener; import org.springframework.context.ApplicationListener; import com.junge.spring.event.FrameEvent;
import com.junge.spring.event.handler.EventHandler; /**
* @author Administrator
*
*/
public class FrameEventListener implements ApplicationListener<FrameEvent> { private EventHandler eventHandler; @Override
public void onApplicationEvent(FrameEvent event) { if (eventHandler.getEventId().equals(event.getEventId())) {
eventHandler.handle(event.getPrameter());
}
} public EventHandler getEventHandler() {
return eventHandler;
} public void setEventHandler(EventHandler eventHandler) {
this.eventHandler = eventHandler;
} }

9.业务VO对象Mail.java

 /**
*
*/
package com.junge.spring.vo; /**
* @author Administrator
*
*/
public class Mail {
private String email; private String content; public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getContent() {
return content;
} public void setContent(String content) {
this.content = content;
}
}

10.Spring业务配置文件event.xml

 <?xml version="1.0" encoding="UTF-8"?>
<p:beans xmlns:p="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans spring-beans-3.2.xsd "> <p:bean id="mailHandler" class="com.junge.spring.event.handler.MailEventHandler">
<p:property name="eventId" value="send_mail_notify" />
</p:bean> <p:bean id="mailListener" class="com.junge.spring.event.listener.FrameEventListener">
<p:property name="eventHandler" ref="mailHandler" />
</p:bean>
</p:beans>

11.测试结果

2015-1-23 14:23:17 org.springframework.context.support.AbstractApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2808b3: startup date [Fri Jan 23 14:23:17 CST 2015]; root of context hierarchy
2015-1-23 14:23:18 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [event.xml]
2015-1-23 14:23:19 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@db4fa2: defining beans [mailHandler,mailListener]; root of factory hierarchy
需要发送邮件给333@email.com,邮件内容是:accdddount

Spring中ApplicationEvent和ApplicationListener封装的更多相关文章

  1. Spring 的 ApplicationEvent and ApplicationListener

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

  2. Spring中ApplicationListener的使用

    背景 ApplicationListener是Spring事件机制的一部分,与抽象类ApplicationEvent类配合来完成ApplicationContext的事件机制. 如果容器中存在Appl ...

  3. 如何使用spring中的Log4jConfigListener--删除

    使用spring中的Log4jConfigListener有如如下好处:    1. 动态的改变记录级别和策略,不需要重启Web应用,如<Effective Enterprise Java> ...

  4. Spring 中的观察者模式

    一.Spring 中观察者模式的四个角色 1. 事件(ApplicationEvent) ApplicationEvent 是所有事件对象的父类.ApplicationEvent 继承自 jdk 的 ...

  5. 这篇文章,我们来谈一谈Spring中的属性注入

    本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring中的对象跟Bean,你知道Spring怎么创 ...

  6. Spring中ApplicationContext对事件的支持

    Spring中ApplicationContext对事件的支持   ApplicationContext具有发布事件的能力.这是因为该接口继承了ApplicationEventPublisher接口. ...

  7. Spring中的设计模式学习

    Spring提供了一种Template的设计哲学,包含了很多优秀的软件工程思想. 1. 简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一. ...

  8. Spring中的设计模式

    [Spring中的设计模式] http://www.uml.org.cn/j2ee/201301074.asp [详解设计模式在Spring中的应用]    [http://www.geek521.c ...

  9. spring事件驱动模型--观察者模式在spring中的应用

    spring中的事件驱动模型也叫作发布订阅模式,是观察者模式的一个典型的应用,关于观察者模式在之前的博文中总结过,http://www.cnblogs.com/fingerboy/p/5468994. ...

随机推荐

  1. 关于出现“对不起,您安装的不是正版应用...”的解决方法

    由于Discuz X版本增加了对插件的版本检测,在安装时,可能会出现:"对不起,您安装的不是正版应用,安装程序无法继续执行"的提示,如下图: 唱唱反调小编在此给大家分享解决方法: ...

  2. Python generator 的yield (enumerate)

    生成杨辉三角 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 def triangles(max): L = [1,] while len(L) - 1 < ...

  3. HTML的基本知识点

    <!DOCTYPE HTML> <html> <body> <video width="320" height="240&quo ...

  4. java 23种设计模式学习。

    一.3大类设计模式:创建型,结构型,行为型. a.5种创建型模式:工厂方法,抽象工厂,单例,建造者,原型. b.7种结构型模式:适配器,装饰器,代理,外观,桥接,组合,享元. c.11种行为型模式:策 ...

  5. [AI]神经网络章3 损失函数

    损失函数 作用 在有监督的学习中,需要衡量神经网络输出和所预期的输出之间的差异大小.这种误差函数需要能够反映出当前网络输出和实际结果之间一种量化之后的不一致程度,也就是说函数值越大,反映出模型预测的结 ...

  6. 代理设计模式 (静态代理设计模式)+ 动态代理(JDK和Cglib)

    一.代理设计模式 1.设计模式:前人总结一套解决特定问题的代码 2.代理设计模式优点: 2.1 保护真实对象 2.2 让真实对象职责更明确 2.3 扩展 3.代理设计模式 3.1 真实对象(老总) 3 ...

  7. 2018.10.26 NOIP训练 数数树(换根dp)

    传送门 换根dpdpdp傻逼题好像不好码啊. 考虑直接把每一个二进制位拆开处理. 先dfsdfsdfs出每个点到1的异或距离. 然后分类讨论一波: 如果一个点如果当前二进制位到根节点异或距离为1,那么 ...

  8. Linux关机操作

    正确的关机流程为:sync > shutdown > reboot > halt 关机指令为:shutdown ,你可以man shutdown 来看一下帮助文档. 例如你可以运行如 ...

  9. static关键字的功能

    转载:https://blog.csdn.net/guotianqing/article/details/79828100 C语言&C++ 1.局部变量 如果在一个函数内部定义了一个静态变量, ...

  10. 菜品识别 API调用

    #get_access_token.py #获取access_token 1 import requests def GetToken(API_KEY,SECRET_KEY): url = 'http ...