Spring事件机制的简单例子
来源:互联网 发布:暖通空调设计常用数据 编辑:程序博客网 时间:2024/05/29 11:11
本例子模拟一个给多个人发送内容(类似于报纸新闻)的例子。
1、定义事件
2、定义无序监听器
之所以说无序,类似于AOP机制,顺序是无法确定的。
2、在实现中需要判断event类型是ContentEvent才可以处理;
更简单的办法是通过泛型指定类型,如下所示
3、定义有序监听器
实现SmartApplicationListener接口即可。
supportsSourceType:支持的目标类型,只有支持的才调用onApplicationEvent;
4.1、配置文件
Java代码
4.2、测试类
1、定义事件
package com.xvshu.hello; import org.springframework.context.ApplicationEvent; public class ContentEvent extends ApplicationEvent { public ContentEvent(final String content) { super(content); } }
2、定义无序监听器
之所以说无序,类似于AOP机制,顺序是无法确定的。
package com.xvshu.hello; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; @Component public class UserOneListener implements ApplicationListener<ApplicationEvent> { @Override public void onApplicationEvent(final ApplicationEvent event) { if(event instanceof ContentEvent) { System.out.println("[UserOneListener]msg:" + event.getSource()); } } }
1、使用@Compoent注册Bean即可;
2、在实现中需要判断event类型是ContentEvent才可以处理;
更简单的办法是通过泛型指定类型,如下所示
package com.xvshu.hello; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; @Component public class UserTwoListener implements ApplicationListener<ContentEvent> { @Override public void onApplicationEvent(final ContentEvent event) { System.out.println("[UserTwoListener]msg:" + event.getSource()); } }
3、定义有序监听器
实现SmartApplicationListener接口即可。
package com.xvshu.hello; import org.springframework.context.ApplicationEvent; import org.springframework.context.event.SmartApplicationListener; import org.springframework.stereotype.Component; @Component public class UserThreeListener implements SmartApplicationListener { @Override public boolean supportsEventType(final Class<? extends ApplicationEvent> eventType) { return eventType == ContentEvent.class; } @Override public boolean supportsSourceType(final Class<?> sourceType) { return sourceType == String.class; } @Override public void onApplicationEvent(final ApplicationEvent event) { System.out.println("UserThreeListener:" + event.getSource()); } @Override public int getOrder() { return 1; } }
package com.xvshu.hello; import org.springframework.context.ApplicationEvent; import org.springframework.context.event.SmartApplicationListener; import org.springframework.stereotype.Component; @Component public class UserFourListener implements SmartApplicationListener { @Override public boolean supportsEventType(final Class<? extends ApplicationEvent> eventType) { return eventType == ContentEvent.class; } @Override public boolean supportsSourceType(final Class<?> sourceType) { return sourceType == String.class; } @Override public void onApplicationEvent(final ApplicationEvent event) { System.out.println("[UserFourListener]msg:" + event.getSource()); } @Override public int getOrder() { return 2; } }
supportsSourceType:支持的目标类型,只有支持的才调用onApplicationEvent;
getOrder:即顺序,越小优先级越高
4.1、配置文件
Java代码
<context:component-scan base-package="com.xvshu"/>
就一句话,自动扫描注解Bean。
4.2、测试类
package com.xvshu; import com.xvshu.hello.ContentEvent; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations={"classpath:spring-config-hello.xml"}) public class HelloIT { @Autowired private ApplicationContext applicationContext; @Test public void testPublishEvent() { applicationContext.publishEvent(new ContentEvent("news is update")); } }
[UserFourListener]msg:news is updat[UserThreeListener]msg:news is update [UserTwoListener]msg:news is updat [UserOneListener]msg:news is updat
0 0
- Spring事件机制的简单例子
- spring的事件机制
- spring的事件机制
- 简单的事件机制
- 事件监听的简单例子
- spring容器的事件机制
- Spring---ApplicationContext的事件机制
- Spring的事件发布机制
- 简单的Spring入门例子
- 简单易懂的spring例子
- spring的简单例子01
- spring的简单例子02
- Spring AOP 的简单例子
- Spring AOP 的简单例子
- Spring AOP 的简单例子
- 简单的spring ioc例子
- 简单的Spring+CXF例子
- 事件机制的简单实例
- 堆排序
- 01JavaScript基础
- 自己对JSP的理解
- Fragment之间Fragment传值
- teamviewer的侧栏问题
- Spring事件机制的简单例子
- 17 - 04 - 01 图解HTTP(36)
- ROS入门_1.3 入门教程目录
- 轮播实现
- 网信办整治“标题党”:新闻标题严禁使用“网曝”“网传”等词
- 【springmvc解读】<mvc:annotation-driven/>
- 第01期:salesforce开发环境的搭建
- 线程池的RejectedExecutionHandler(拒绝策略)
- Ubuntu 下 安装 jdk(以jdk7为例)