java事件监听器

事件监听器机制是观察者模式的一种,通过把事件源和事件处理流程以监听器的方法隔离开来,减小了主流程与被触发事件的执行流程间的耦合,便于代码的维护和对事件处理流程的扩展。
在事件监听机制中,涉及到三个角色:事件、发布者和监听器
事件:在事件源和事件监听器之间传递信息的对象实体。
发布者:在事件发生后,负责把事件发布到监听者的对象。
监听者:监听事件,并进行事件处理或转发的对象。
Java中提供了事件监听器实现的框架,使用Java中的事件监听器,需要熟悉以下几个类或接口:
1. EventObject:事件的基类,在Java中自定义事件时需要继承的基类,其定义了事件源——Object类型的属性,可以把发生事件所在的类实例的引用传递过来,以便于在事件处理流程中使用(如果有使用要求的话)。在自定义的事件中,还可以定义自己应用所需的其他属性。
2. EventListener:自定义事件监听器必须实现的接口,没有具体方法,只起到标识作用。

Java事件的简单实现如下(代码参考Spring揭秘中自定义事件):
1. 定义事件:
package com.nuc.event;

import java.util.EventObject;
/**
* 定义事件对象,在该事件中除了继承自父类EventObject的source属性外,还自定义了
* 其他的一些属性
*/
public class MethodExecutionEvent extends EventObject {

private static final long serialVersionUID = -641456338528520034L;
private String methodName;
private MethodExecutionStatus methodExecutionStatus;

public MethodExecutionEvent(Object source) {
super(source);
}

public MethodExecutionEvent(Object source, String methodName, MethodExecutionStatus methodExecutionStatus) {
super(source);
this.methodName = methodName;
this.methodExecutionStatus = methodExecutionStatus;
}

public String getMethodName() {
return methodName;
}

public void setMethodName(String methodName) {
this.methodName = methodName;
}

public MethodExecutionStatus getMethodExecutionStatus() {
return methodExecutionStatus;
}

public void setMethodExecutionStatus(MethodExecutionStatus methodExecutionStatus) {
this.methodExecutionStatus = methodExecutionStatus;
}
}

2. 定义监听器接口及其实现
监听器接口:
package com.nuc.listener;

import java.util.EventListener;
import java.util.EventObject;

public interface MethodExecutionEventListener extends EventListener {

void onMethodExecute(EventObject event);
}

监听器实现:
package com.nuc.listener;

import java.util.EventObject;

import com.nuc.event.MethodExecutionEvent;
import com.nuc.event.MethodExecutionStatus;
/**
* 事件监听器,定义当事件发生时会触发的动作。但这里的事件处理流程并不会被
* 事件源所在执行流程直接调用,而通过第三者——发布者把事件传递过来
*/
public class MethodExecutionEventListenerImpl implements
MethodExecutionEventListener {

public void onMethodExecute(EventObject event) {

if (event instanceof MethodExecutionEvent) {
if (MethodExecutionStatus.BEGIN.equals(((MethodExecutionEvent)event).getMethodExecutionStatus())) {
System.out.println("invoke start...");
}

if (MethodExecutionStatus.END.equals(((MethodExecutionEvent) event).getMethodExecutionStatus())) {
System.out.println("method end...");
}
}
}
}


3. 定义发布者
package com.nuc.publisher;

import java.util.EventObject;

import com.nuc.listener.MethodExecutionEventListener;
import com.nuc.listener.MethodExecutionEventListenerImpl;
/**
* 对事件触发流程和事件执行流程进行解耦的重要组件,负责把把事件发布到监听器里。
* 所谓的发布即是把事件传递给监听器。
*/
public class EventPublisher {

private MethodExecutionEventListener listener = new MethodExecutionEventListenerImpl();

public void publishEvent(EventObject event) {

listener.onMethodExecute(event);
}
}


4. 主流程发布事件:
package com.nuc;

import com.nuc.event.MethodExecutionEvent;
import com.nuc.event.MethodExecutionStatus;
import com.nuc.publisher.EventPublisher;

public class App
{
public static void main( String[] args )
{
new EventPublisher().publishEvent(new MethodExecutionEvent("ok", "main", MethodExecutionStatus.BEGIN));

new EventPublisher().publishEvent(new MethodExecutionEvent("ok", "main", MethodExecutionStatus.END));
}
}


上面只是java事件监听器的最简单的实现,在实际应用中还需要根据需要,定义适合的EventObject及处理流程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值