使用JDK自带组件实现事件监听

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);
            }
        });
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值