利用Spring实现观察者模式(Oberver)
来源:互联网 发布:ubuntu高开发 编辑:程序博客网 时间:2024/06/05 23:52
转载:http://www.zhengmenbb.com/archives/298.htm
侦听者类: Observer
package com.zhengmenbb.spring.listener;import java.util.Map;public interface Observer { public void execute(Map<String, Object> paras); public boolean isAsyn();}
抽像侦听者
package com.zhengmenbb.spring.listener;public abstract class AbstractObserver implements Observer { protected boolean asyn = false; public boolean isAsyn() { return asyn; } public void setAsyn(boolean asyn) { this.asyn = asyn; }}
一个测试的侦听者:
package com.zhengmenbb.spring.listener.observers;import java.util.Map;import com.zhengmenbb.spring.listener.AbstractObserver;public class Test1 extends AbstractObserver { @Override public void execute(Map<String, Object> paras) { System.out.println("i am here"); System.out.println("thread name Observer:" + Thread.currentThread().getName()); }}
事件管理类: EventManager
package com.zhengmenbb.spring.listener;import java.util.List;import java.util.Map;public class EventManager { private Map<String, List<Observer>> events; public void dispatchEvent(String eventName, Map<String, Object> paras) { if (events == null || events.isEmpty()) { return; } List<Observer> observers = events.get(eventName); for(Observer observer : observers) { if (observer.isAsyn()) { EventManagerThread eventManagerThread = new EventManagerThread(observer, paras); Thread thread = new Thread(eventManagerThread); thread.start(); } else { observer.execute(paras); } } } public void setEvents(Map<String, List<Observer>> events) { this.events = events; }}class EventManagerThread implements Runnable { private Observer observer; private Map<String, Object> paras; public EventManagerThread(Observer observer, Map<String, Object> paras) { this.observer = observer; this.paras = paras; } @Override public void run() { this.observer.execute(paras); }}
配置文件 : listener.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <bean id="eventManager" class="com.zhengmenbb.spring.listener.EventManager"> <property name="events"> <map> <entry key="event1"> <list> <ref bean="test1"/> </list> </entry> </map> </property> </bean> <bean id="test1" class="com.zhengmenbb.spring.listener.observers.Test1"> <property name="asyn" value="false"></property> </bean> </beans>
测试类:
package com.zhengmenbb.spring.listener;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test { /** * @param args */ public static void main(String[] args) { String[] locations = {"listener.xml"}; ApplicationContext ctx = new ClassPathXmlApplicationContext(locations); EventManager eventManager = (EventManager)ctx.getBean("eventManager"); System.out.println("thread name main:" + Thread.currentThread().getName()); eventManager.dispatchEvent("event1", null); }}
0 0
- 利用Spring实现观察者模式(Oberver)
- 观察者模式(Oberver Pattern)
- 第18章 观察者模式(Oberver Pattern)
- (第Ⅳ部分 行为型模式篇) 第18章 观察者模式(Oberver Pattern)
- (第Ⅳ部分 行为型模式篇) 第18章 观察者模式(Oberver Pattern)
- (第Ⅳ部分 行为型模式篇) 第18章 观察者模式(Oberver Pattern)
- 利用观察者模式实现通知
- 利用 SPL 快速实现 观察者设计模式
- 利用Observable、Observer实现观察者模式
- 用spring实现观察者设计模式
- 用 spring 实现观察者设计模式
- spring ApplicationListener实现Observer观察者模式
- 利用java中的观察者模式模仿spring中的ApplicationContextAware
- 观察者模式(Python实现)
- 观察者模式(java实现)
- C#中利用代理实现观察者设计模式
- C#中利用代理实现观察者设计模式
- 利用观察者模式实现Service与Activity的通信
- Eclipse中,鼠标右键选择了选项卡窗口的detached属性
- Unity3D 网络通信_HTTP
- PostgreSQL index scan,bitmap index scan区别
- Java NIO系列教程(四) Scatter/Gather
- Runtime类中的freeMemory,totalMemory,maxMemory等几个方法
- 利用Spring实现观察者模式(Oberver)
- Android手机终端与PC实现socket通讯 Socket编程
- abort信号捕捉
- 【日常学习】【模拟双向链表】【疑问】Uva12657 - Boxes in a Line题解
- Android消息推送资料收集
- Python3中利用Urllib进行表单数据提交(Get,Post)
- 解决 repo sync error: Exited sync due to fetch errors
- java内存模型之四---volatile
- Java NIO系列教程(五) 通道之间的数据传输