一:Spring的事件发布 ApplicationContext提供了针对Bean的事件传播功能,其中的主角是publishEvent()方法,通过这个方法可以将事件通知给系统内的监听器(需实现ApplicationListener接口)。 ApplicationContext这个接口,是Spring的上下文,通常获取Bean就需要这个接口,这个接口并不是直接继承于BeanFactory,其中最著名的是直接继承了ApplicationPublisher接口,这个接口查看源码可以发现:只有一个方法,那就是主角 void publishEvent(ApplicationEvent event); Spring提供的基于Aware相关的接口有ApplicationContextAware,ResourceloaderAware,ServletContextAware(注意:Struts2也有这个接口,注意区分),最常用的就这三个,而Spring的事件发布机制需要用到ApplicationContextAware接口。 实现了ApplicationContextAware的Bean,在Bean初始化时将会被注入ApplicationContext实例(因为这个接口里有set(ApplictationContext ctx)方法)二:有了以上基础,看示例代码:1.首先创建事件类 TradeEventpackage net.wang.test; import org.springframework.context.ApplicationEvent; /** * 事件Event * @author LiuRuoWang */ public class TradeEvent extends ApplicationEvent{ public TradeEvent(Object source) { super(source); System.out.println("事件:TradeEvent event !!"); } }<font face="Verdana">事件必须继承Spring提供的ApplicationEvent抽象类</font><font face="Verdana"></font> <font face="Verdana">2.然后编写 事件的发布者HelloWorld:</font>package net.wang.test; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; /** * 事件的发布者 * @author LiuRuoWang */ public class HelloWorld implements ApplicationEventPublisherAware{ private String word; public void setWord(String word) { this.word = word; } private ApplicationEventPublisher tradeEventPublisher; public void setApplicationEventPublisher(ApplicationEventPublisher applicationEventPublisher) { this.tradeEventPublisher=applicationEventPublisher; } public void say(){ System.out.println("say:"+this.word); TradeEvent tradeEvent = new TradeEvent(new String("HelloWorld!")); this.tradeEventPublisher.publishEvent(tradeEvent); } }其中在say()方法里发布了事件3.最后编写 事件的接收者EventReceiver:package net.wang.test; import org.springframework.context.ApplicationListener; /** * 事件的接收者 * @author LiuRuoWang */ public class EventReceiver implements ApplicationListener<TradeEvent>{ public void onApplicationEvent(TradeEvent event) { System.out.println("监听到的事件:"+event.getSource()); } }事件的接收者其实是一个监听器,必须实现ApplicationListener,注意把事件TradeEvent直接写到泛型中4.applicationContext.xml:<?xml version="1.0" encoding="GBK"?> <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" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd"> <bean name="helloWrold" class="net.wang.test.HelloWorld"> <property name="word" value="Word!"/> </bean> <bean name="eventReceiver" class="net.wang.test.EventReceiver"/> </beans>注意把事件的接收者写入配置文件中5.测试Test:package net.wang.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml"); HelloWorld h = (HelloWorld) ctx.getBean("helloWrold"); h.say(); } }6.结果显示:结果中已经显示监听到的事件,说明成功。Spring中如何配置Hibernate事务 http://www.linuxidc.com/Linux/2013-12/93681.htmStruts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm基于 Spring 设计并实现 RESTful Web Services http://www.linuxidc.com/Linux/2013-10/91974.htmSpring-3.2.4 + Quartz-2.2.0集成实例 http://www.linuxidc.com/Linux/2013-10/91524.htm使用 Spring 进行单元测试 http://www.linuxidc.com/Linux/2013-09/89913.htm运用Spring注解实现Netty服务器端UDP应用程序 http://www.linuxidc.com/Linux/2013-09/89780.htmSpring 3.x 企业应用开发实战 PDF完整高清扫描版+源代码 http://www.linuxidc.com/Linux/2013-10/91357.htmSpring 的详细介绍 :请点这里Spring 的下载地址 :请点这里本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-07/133642.htm
收藏该网址