`
enjiex
  • 浏览: 67228 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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及处理流程。






分享到:
评论

相关推荐

    JAVA事件监听器的四种实现方式

    JAVA事件监听器的四种实现方式,条理清晰,简明易懂,看过就学会

    java事件监听方法和代码

    Java事件监听器即一组动作接口。如键盘事件KeyEvent对应的接口是: public interface KeyListener extends EventListener { public void keyPressed(KeyEvent ev); public void keyReleased(KeyEvent ev); public ...

    java 监听器练习

    简单的java监听器小练习,适合初学者!

    Java设计模式之监听器模式实例详解

    主要介绍了Java设计模式之监听器模式,结合实例形式较为详细的分析了java设计模式中监听器模式的概念、原理及相关实现与使用技巧,需要的朋友可以参考下

    Java事件处理机制- 事件监听器的四种实现方式

    Java事件处理机制- 事件监听器的四种实现方式 分析的非常好

    java监听器的实现和原理详解

    主要给大家介绍了关于java监听器实现和原理的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    自己编写一个Java监听器

     2.1Java的时间监听机制涉及到三个组件:事件源、事件监听器、事件对象  2.2当事件源上发生操作时,它会调用事件监听器的一个方法,并且调用这个方法时,会传递事件对象过来  2.3事件监听器是由开

    Java Swing 常用事件和监听器接口

    是笔者学习java swing事件、监听器、接口方法的总结,希望对初学java者有所帮助,是word格式,希望有人进一步总结。

    自定义事件的监听器

    2. 对某个源注册一个监听器,此源便成为一个事件源,当事件源上发生某一个动作时,监听器的某个方法将会被调用执行,在执行事件监听器的这个方法时,同时会把事件监听对象传递给此方法,开发人员在监听器中可以拿到...

    JAVA SESSION监听器

    JAVA SESSION 监听器 有效监听服务器SESSION情况,当前登录用户等

    java一个监听器的例子

    java一个监听器的例子

    Java的监听器种类

    Java的监听器种类,文档内详细描述了java各种监听器,能够让你在系统当中合理的去使用,从而提高系统的效率。

    java监听器练习

    java监听器练习,java初学者!

    JAVA事件处理机制

    JAVA事件处理机制 事件监听器 事件监听器适配器

    java监听器demo

    一个java监听器的实现demo,即观察者设计模式实现

    java事件监听模式实现万能事件总线.zip

    Java简单几个类实现万能事件总线,采用享元模式和监听器模式。 使用方法很简单,直接EventCenter.get().addListener(key,()->{...你的代码快...});就行, 无论在哪,只要执行EventCenter.get().sendMessage(key,...

    java监听器和过滤器详解

    java监听器和过滤器详解,详细而且简单,保证能看懂

    JAVA USB监听器

    自动监控USB设备,插上后自动复制指定类型文件到指定目录!后台运行,隐藏性能较好。

    JavaWeb开发技术-Listener监听器.pptx

    事件发生时会触发监听器的成员方法,即事件处理器,传递事件对象。 事件处理器通过事件对象获得事件源,并对事件源进行处理。 Listener监听器 用于监听域对象创建和销毁的事件监听器 用于监听域对象属性增加和删除的...

Global site tag (gtag.js) - Google Analytics