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吧


Servlet、Filter 和Listener 工作原理

Servlet工作原理 一、Servlet生命周期分为三个阶段:      1、初始化阶段,调用init()方法      2、响应客户请求阶段,调用service()方法      3、终止...
  • qq_35124535
  • qq_35124535
  • 2017年03月07日 08:57
  • 81

java监听器的原理与实现

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

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

现在来说说Servlet的监听器Listener,它是实现了javax.servlet.ServletContextListener 接口的服务器端程序,它也是随web应用的启动 而启动,只初始化一...
  • reggergdsg
  • reggergdsg
  • 2016年10月22日 12:00
  • 23265

Java利用listener实现回调,即观察者模式

java中实现观察者模式有很多种方式,上一篇文章介绍到了,利用callback的方式实现了回调,这篇文章准备介绍的是利用listener实现回调。 Java回调机制根据实时性划分: 同步回调 异步回调...
  • Lin_Sir6
  • Lin_Sir6
  • 2017年04月11日 14:15
  • 1314

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

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

Tomcat7 web应用的加载原理 (三) Lisener Filer Servlet的加载和调用

前一篇文章分析到了org.apache.catalina.deploy.WebXml类的configureContext方法,可以看到在这个方法中通过各种setXXX、addXXX方法的调用,使得每个...
  • juroney1
  • juroney1
  • 2014年04月30日 02:51
  • 1043

web.xml中listener作用及使用

一.WebContextLoaderListener 监听类 它能捕捉到服务器的启动和停止,在启动和停止触发里面的方法做相应的操作! 它必须在web.xml 中配置才能使用,是配置监听类的 二....
  • java_pengjin
  • java_pengjin
  • 2011年09月08日 14:21
  • 75479

Servlet、Filter、Listener深入理解

Servlet、Filter和Listener总结以及Cookie和Session的深入理解
  • sunxianghuang
  • sunxianghuang
  • 2016年08月10日 12:02
  • 3543

Java SE 6 新特性系列之三 JMX 与系统管理

前言在 Java 程序的运行过程中,对 JVM 和系统的监测一直是 Java 开发人员在开发过程所需要的。一直以来,Java 开发人员必须通过一些底层的 JVM API,比如 JVMPI 和 JVMT...
  • fuliangliang
  • fuliangliang
  • 2007年10月09日 14:45
  • 717

Web 前端知识体系精简

JAVASCRIPT 篇 0、基础语法 Javascript基础语法包括:变量定义、数据类型、循环、选择、内置对象等。 数据类型有string,number,boolean,null,unde...
  • Wz1135640
  • Wz1135640
  • 2017年11月29日 15:28
  • 1429
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Listener实现原理
举报原因:
原因补充:

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