Listener
- 监听器
监听某一个事件的发生,状态的改变 - 监听器内部机制
接口回调
接口回调
- 需求:A 在执行循环,当循环到5的时候,通知 B。
事先先把一个对象传递给A,当A执行到5的时候,通知这个对象,调用B中的方法。但是注意,不是直接传递B的实例,而是传递一个接口实例过去。
/**
* 这是以前Java基础使用的代码
* 但是假设这个A类是早就写好的类,这个方法内部不能直接使用 new B()
* 1. 不能直接 new B()
* 2. 也不能直接传递B的实例进来
* 所以在定义这个方法的时候,不管未来写的是B类,还是D类,为了通用
* 定义一种接口,只要让未来的那些类实现这个接口,然后这个方法的参数写接口类型即可
*/
public class A {
// public void print(){
// for (int i = 0; i < 10; i++) {
// System.out.println("循环到了--" + i);
// if (i == 5){
// System.out.println("循环到了5,通知B");
// B b = new B();
// b.printFive();
// }
// }
// }
public void print(PrintListener listener){
for (int i = 0; i < 10; i++) {
System.out.println("循环到了--" + i);
if (i == 5){
System.out.println("循环到了5,该通知调用者了");
listener.print();
}
}
}
}
public interface PrintListener {
void print();
}
public class B implements PrintListener{
@Override
public void print() {
System.out.println("A循环到了5,所有B这个方法被调用");
}
// public void printFive(){
// System.out.println("A循环到了5,所有B这个方法被调用");
// }
}
public class Test {
public static void main(String[] args) {
A a = new A();
//这是多态的体现
a.print(new B());
}
}
Web 监听器
-
总共 8 个,划分为三个类型
- 监听三个作用域创建和销毁
request – httpServletRequest
session – httpSession
application – ServletContext
- ServletContextListener
- ServletRequestListener
- HttpSessionListener
- 监听三个作用域属性状态变更
- 监听httpSession里保存值得状态变更
- 监听三个作用域创建和销毁