`
isiqi
  • 浏览: 16076258 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Spring--> ApplicationContext事件传播

阅读更多
事件传播
ApplicationContext基于Observer模式(java.util包中有对应实现),提供了针对Bean的事件传
播功能。通过Application. publishEvent方法,我们可以将事件通知系统内所有的
ApplicationListener。
事件传播的一个典型应用是,当Bean中的操作发生异常(如数据库连接失败),则通过事件传播
机制通知异常监听器进行处理。在笔者的一个项目中,就曾经借助事件机制,较好的实现了当系统
异常时在监视终端上报警,同时发送报警SMS至管理员手机的功能。
在目前版本的Spring中,事件传播部分的设计还有待改进。同时,如果能进一步支持异步事件处理
机制,无疑会更具吸引力。
下面是一个简单的示例,当LoginAction执行的时候,激发一个自定义消息“ActionEvent”,此
ActionEvent将由ActionListener捕获,并将事件内容打印到控制台。
LoginActoin.java:
public class LoginAction implements ApplicationContextAware {
private ApplicationContext applicationContext;
public void setApplicationContext(
ApplicationContext applicationContext
)
throws BeansException {
this.applicationContext = applicationContext;
}
public int login(String username,String password) {
ActionEvent event = new ActionEvent(username);
this.applicationContext.publishEvent(event);
return 0;
}
}
ActionEvent.java:
public class ActionEvent extends ApplicationEvent {
public ActionEvent(Object source) {
super(source);
}
}
ActionListener.java:
public class ActionListener implements ApplicationListener {
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ActionEvent) {
System.out.println(event.toString());
}
}
}

配置非常简单:
<bean id="loginaction" class="net.xiaxin.beans.LoginAction"/>
<bean id="listener" class="net.xiaxin.beans.ActionListener"/>

运行测试代码:
ApplicationContext ctx=new
FileSystemXmlApplicationContext("bean.xml");
LoginAction action = (LoginAction)ctx.getBean("action");
action.login("Erica","mypass");

可以看到控制台输出:
net.xiaxin.beans.LoginEvent[source=Erica]

org.springframework.context.event.ApplicationEventMulticasterImpl实现了事件传播机
制,目前还相对简陋。
在运行期,ApplicationContext会自动在当前的所有Bean中寻找ApplicationListener接
口的实现,并将其作为事件接收对象。当Application. publishEvent方法调用时,所有的
ApplicationListener接口实现都会被激发,每个ApplicationListener可根据事
件的类型判断是否是自己需要处理的事件,如上面的ActionListener只处理
ActionEvent事件。
分享到:
评论

相关推荐

    spring applicationContext 配置文件

    -- 配置事务的传播特性 --&gt; &lt;tx:advice id="txAdvice" transaction-manager="transactionManager"&gt; &lt;tx:attributes&gt; *" propagation="REQUIRED"/&gt; *" propagation="REQUIRED"/&gt; *" propagation="REQUIRED...

    Spring.html

    传播行为:A--&gt;B,在B上声明是否一定需要事务管理 requerd:必须的(默认),如果A有事务那么就加入A的事务,如果A没有事务那么单独创建一个事务 supports,如果A有事务则加入,如果没有就算了 隔离级别 default:...

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    -- 下面定义事务传播属性 [ bus* 事务的方法名]--&gt; &lt;props&gt; *"&gt;PROPAGATION_REQUIRED&lt;/prop&gt; &lt;/props&gt; &lt;/property&gt; &lt;/bean&gt; &lt;!-- 定义BeanNameAutoProxyCreator,该bean是个bean后处理器,无需被引用...

    SpringFramework常见知识点.md

    - BeanFactory和ApplicationContext的区别是什么? - 什么是IOC容器和DI依赖注入? - Spring依赖注入的方式有几种? - 一个bean的定义包含了什么?(BeanDefinition) - bean的作用域有哪些? - Spring 的扩展点主要...

    spring考试通过必备材料.docx

    —4、依赖注入 --&gt; 8 applicationContext.xml中Setter方法类之间的注入 8 applicationContext.xml 中Setter方法属性注入 User配置 8 applicationContext.xml构造器方法属性注入 9 applicationContext.xml中setter...

    开源框架 Spring Gossip

    &lt;br&gt;Resource 的取得 &lt;br&gt;解析文字讯息 &lt;br&gt;倾听事件 &lt;br&gt;事件传播 &lt;br&gt;&lt;br&gt;&lt;br&gt;AOP(Aspect-Oriented Programming) &lt;br&gt; 在一个服务的流程中插入与服务无关的逻辑(例如Logging、Security),这样的逻辑称为 Cross...

    ssh(structs,spring,hibernate)框架中的上传下载

     本文后面的章节将从数据持久层->业务层->Web层的开发顺序,逐层讲解文件上传下载的开发过程。  数据持久层  1、领域对象及映射文件  您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate ...

    spring事件传播

    spring发布和接收定制事件(这个上传必须要填资源分啦),ApplicationContext基于Observer模式(java.util包中有对应实现),提供了针对Bean的事件传 播功能。通过Application. publishEvent方法,我们可以将事件...

    applicationContext-trans.xml

    spring事务与传播行为,通知,数据源,切面,,,,,,,

    spring事件扩展

    事件传播 ApplicationContext基于Observer模式(java.util包中有对应实现),提供了针对Bean的事件传 播功能。通过Application. publishEvent方法,我们可以将事件通知系统内所有的 ApplicationListener。 事件...

    Spring中文帮助文档

    3.10. 以J2EE RAR文件的形式部署Spring ApplicationContext 3.11. 基于注解(Annotation-based)的配置 3.11.1. @Autowired 3.11.2. 基于注解的自动连接微调 3.11.3. CustomAutowireConfigurer 3.11.4. @...

    Spring API

    3.10. 以J2EE RAR文件的形式部署Spring ApplicationContext 3.11. 基于注解(Annotation-based)的配置 3.11.1. @Autowired 3.11.2. 基于注解的自动连接微调 3.11.3. CustomAutowireConfigurer 3.11.4. @...

    高级开发spring面试题和答案.pdf

    Spring中BeanFactory和ApplicationContext的区别 谈谈Spring IOC的理解,原理与实现? bean的生命周期,详细看上面 SpringBoot自动装配的过程的原理: spring的缓存; spring是如何解决的循环依赖; BeanFactory和...

    Spring.3.x企业应用开发实战(完整版).part2

    5.6.2 解构Spring事件体系的具体实现 5.6.3 一个实例 5.7 小结 第6章 Spring AOP基础 6.1 AOP概述 6.1.1 AOP到底是什么 6.1.2 AOP术语 6.1.3 AOP的实现者 6.2 基础知识 6.2.1 带有横切逻辑的实例 6.2.2 JDK动态代理 ...

    SpringBoot事件发布及订阅详解含代码示例(值得珍藏)

    当某个特定的事件发生时,ApplicationEvent 对象会被创建并发布到 ApplicationContext 中,所有注册监听该事件的监听器就会收到通知并执行相应的操作。 ApplicationEvent 是一个泛型类,可以用来传递任何类型的数据...

    Spring3.x企业应用开发实战(完整版) part1

    5.6.2 解构Spring事件体系的具体实现 5.6.3 一个实例 5.7 小结 第6章 Spring AOP基础 6.1 AOP概述 6.1.1 AOP到底是什么 6.1.2 AOP术语 6.1.3 AOP的实现者 6.2 基础知识 6.2.1 带有横切逻辑的实例 6.2.2 JDK动态代理 ...

    深入剖析Spring对Hibernate事务管理的核心原理

    第一步,配置我们的事务传播行为,applicationContext.xml。PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事物,如果已经存在一个事物中,加入到这个事物中,具体请查阅Spring的事物传播行为。

    SSH概要介绍

    6、将applicationContext.xml的事务传播控制器,注解注入service接口实现类,在需要事务的地方,注解配置事务控制。将Dao接口注解注入service接口实现类,接口实现类调用Dao接口,将action所要的操作,传递给Dao接口...

Global site tag (gtag.js) - Google Analytics