1.抽象事件定义
/**
* 事件定义
*/
public abstract class AbstractEvent extends EventObject{
/**
*
*/
private static final long serialVersionUID = 977722347679465568L;
public AbstractEvent(Object source) {
super(source);
}
}
2.定义业务事件
public class BizEvent extends AbstractEvent {
public bizEvent(DetailModel DetailModel) {
super(DetailModel);
}
}
3.定义事件监听基础接口
public interface IEventListener extends EventListener {
void processEventOccurred(AbstractEvent evt);
}
4.定义业务监听
public class BizListener implements IEventListener {
/**
* key: id
* value: BizModel
*/
private static Map<String, BizModel> CASCADE_APPLY_DETAIL_CACHE = new ConcurrentHashMap<String,BizModel>();
public BizListener(EventRegister register) {
register.addMyEventListener(this);
}
/**
* 监听广播事件,异步将消息进行存储
*/
@Override
public void bizEventOccurred(AbstractEvent evt) {
if (evt instanceof BizEvent) {
BizEvent event = (BizEvent) evt;
BizModel bizModel = (BizModel) event.getSource();
......
}
}
}
5.定义事件注册机
/**
* 事件注册机
*/
public class EventRegister {
protected Vector listenerList = new Vector();
private int value;
public void setValue(int newValue){
if(value!=newValue){
value=newValue;
DefaultEvent evt = new DefaultEvent(newValue);
fireMyEvent(evt);
}
}
/**
* 添加事件
* @param listener
*/
public synchronized void addMyEventListener(IEventListener listener){
listenerList.add(listener);
}
/**
* 移出事件
* @param listener
*/
public synchronized void removedMyEventListener(IEventListener listener){
listenerList.removeElement(listener);
}
/**
* 触发事件
* @param evt
*/
public void fireMyEvent(DefaultEvent evt){
Vector currentListenerList = null;
synchronized(this){
currentListenerList=(Vector)listenerList.clone();
}
for(int i=0; i<currentListenerList.size(); i++) {
IEventListener listener = (IEventListener) currentListenerList.elementAt(i);
listener.processEventOccurred(evt);
}
}
}
6.异步广播
public class BizBuildUtil {
/**
* 异步将日志广播出去
*
* @param Biz
*/
public static void buildDetailLog(Biz biz) {
ThreadPoolExecutor pool = ThreadPoolExecutorUtils.getMonitorProcessthreadPool();
pool.execute(new Runnable() {
@Override
public void run() {
// 业务日志广播
BizEvent event = new BizEvent(biz);
EventRegister register = new EventRegister();
BizListener listener = new BizListener(register);
register.fireMyEvent(event);
}
});
}
}