Listener能干嘛
监听器,顾名思义就是用于监听某种动作而做出反应,根据动作的类型和监听对象的类型分为以下几种:
ServletContext
-------ServletContextListener
-------ServletContextAttributeListener
HttpSession
-------HttpSessionListener
-------HttpSessionAttributeListener
ServletRequest
-------ServletRequestListener
-------ServletRequestAttributeListener
用ServletContext来举个例子,当Tomcat创建ServletContext时,ServletContextListener就会监听到这个操作,
当ServletContext中的属性发生变化时,ServletContextAttributeListener会监听到这类操作。
Listener的运作流程
现在已经知道Listener的作用了,那它是如何进行监听的呢,
在看下面这张图之前,可以思考一下这个问题:监听器如何知道被监听对象的发生了指定的操作?监听器一直循环检测被监听对象操作的某个公共的值是否发生变化
被监听对象的发生了指定的操作时主动向监听器报告
第一种方式明显不合理并且也不优雅,
在设计模式中,这种称为观察者模式,也就是第二种方式,
好!现在我知道被监听对象的发生了指定的操作时会主动向监听器报告了,
但我怎么知道被监听对象应该向哪个监听器报告呢?
这就需要注册了,被监听对象主动注册一个监听器在本地就行,之后在调用被监听对象的指定操作时,会调用保存在本地的监听器实例中某个方法就行,Java代码就这么写,
流程示意图如下:
实例代码:
/*** 监听事件,用于包裹被监听对象** @title: Event* @Author myllxy* @Date: 20-10-18 下午9:26* @Version 1.0*/
public class Event {