Listener实现原理

原创 2012年03月21日 13:44:24

今天无聊看了下struts源码 发现原来Listener的实现其实挺简单的。

先在这里记一下

实现所需要的对象:

1.需要监听的对象:Monitable

2.监听器接口:Listener

3.监听器实现:MyListener

4.测试类:Test


1.需要监听的对象

import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * @author zfss Email: zfss2012@gmail.com
 * @version Date: 2012-3-21,Time: 下午01:23:04
 */
public class Monitable {
	private List<Listener> listeners = new CopyOnWriteArrayList<Listener>();
	
	public void addListener(Listener listener){
		listeners.add(listener);
	}
	public void removeListener(Listener listener){
		listeners.remove(listener);
	}
	public void init(){
		if(!(listeners.size()==0)){
			for(Listener l:listeners){
				l.init();
			}
		}
		/**
		 * 接下来是正常的初始化逻辑
		 */
	}
	public void destory(){
		if(!(listeners.size()==0)){
			for(Listener l:listeners){
				l.destory();
			}
		}
		/**
		 * 接下来是正常的销毁逻辑
		 */
	}
}
2.监听器接口

/**
 * @author zfss Email: zfss2012@gmail.com
 * @version Date: 2012-3-21,Time: 下午01:26:02
 */
public interface Listener {
	public void init();//监听初始化事件
	public void destory();//监听销毁事件,可以自己定义一些事件什么的
}

3.监听器实现

/**
 * @author zfss Email: zfss2012@gmail.com
 * @version Date: 2012-3-21,Time: 下午01:40:30
 */
import static net.sszf.util.Print.*;
public class MyListener implements Listener{

	@Override
	public void init() {
		println("初始化");	
	}

	@Override
	public void destory() {
		println("销毁");		
	}

}

4.测试类

import static net.sszf.util.Print.*;

/**
 * @author zfss Email: zfss2012@gmail.com
 * @version Date: 2012-3-19,Time: 下午09:30:23
 */
public class Test{
	public static void main(String[] args){
		Monitable mt=new Monitable();
		mt.addListener(new MyListener()); //添加监听器
		mt.init();
		mt.destory();
	}
}


执行结果:

初始化
销毁
成功监听到了初始化和销毁事件....

算是一种AOP吧


相关文章推荐

java web之Listener实现单态登录

废话不说,直接上代码! 登录与注销动作都在该JSP中完成。

Java三大器之监听器(Listener)的工作原理和代码演示

现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动 而启动,只初始化一...

java监听器的原理与实现

监听器模型涉及以下三个对象,模型图如下: (1)事件:用户对组件的一个操作,称之为一个事件 (2)事件源:发生事件的组件就是事件源 (3)事件监听器(处理器):监听并负责处理事件的方法 执行顺序如...
  • tfygg
  • tfygg
  • 2016年06月12日 00:45
  • 10059

web.xml中listener的作用及使用

一.WebContextLoaderListener  监听类  它能捕捉到服务器的启动和停止,在启动和停止触发里面的方法做相应的操作!  它必须在web.xml 中配置才能使用,是配置监听类的二.下...

tomcat源码解析(二)--web.xml文件的解析

根据上一章所知,tomcat解析server.xml的规则是在org.apache.catalina.startup.Catalina类的createStartDigester方法里面,部分代码如下:...

Android编程之Listener侦听的N种写法及实现原理

写下这个题目时突然想起鲁迅笔下的孔乙已,茴香豆的几种写法,颇有些咬文嚼字的味道。虽然从事手机编程多年,但一直使用的是C和C++编程,由于安卓早期只支持JAVA开发,所以对于时下如火如荼的安卓系统,我一...
  • blogercn
  • blogercn
  • 2012年03月26日 15:32
  • 20657

10. Dubbo原理解析-Listener & filter

Listener ExporterListener: dubbo在服务暴露(exporter)以及销毁暴露(unexporter)服务的过程中提供了回调窗口,供用户做业务处理。ProtocolLis...

Java三大器之监听器(Listener)的工作原理和代码演示

现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动 而启动,只初始化一...

监听者模式(listener)(c++实现)

监听者对大家来说可能并不陌生,所谓监听者就是用来监听自已感兴趣的事件的,当收到自已感兴趣的事件时会做出相应的反映。     它的应用是非常广的,比如win32的消息机制,它跟监听者模式就异曲同工,操作...

Ringo.js嵌入集成(二):使用Listener Filter替换官方的JsgiServlet实现

就像上回所讲,官方提供了一个样例JsgiServlet。虽然已经在其上stick矿建,但是就个人看来,这个东西确实类似一个样例。  如果使用serlvet作为js容器(ringo-engine)的载...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Listener实现原理
举报原因:
原因补充:

(最多只允许输入30个字)