监听器
略,不怎么使用了。
见名知意,比如你上课玩手机,亲爱的班主任静悄悄地出现在你身后。你就是“被监听的对象”,班主任就”监听者“,你因为玩手机触发了这个事件,导致你班主任来“慰问”你。
监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。利用观察者设计模式就可以定义实现监听器了。
Tomcat提供了三个对象的监听器:
分别监听对象的创建和销毁,对象属性的变化,以及监听httpsession中对象的绑定和解绑定。随着web应用的启动而启动,销毁而销毁,只初始化一次。
- ServletContextListener
- HttpSessionListener
- ServletRequestListener
有没有感觉和动态代理有点联系???
自定义监听器
被监听者
public class Student {
//插个眼,监听它
private StudentListener studentListener;
public StudentListener getStudentListener() {
return studentListener;
}
public void setStudentListener(StudentListener studentListener) {
this.studentListener = studentListener;
}
//监听哪些方面
public void music(){
System.out.println("听歌");
studentListener.music(new StudentEnvent());
}
public void play(){
System.out.println("玩游戏");
studentListener.play(new StudentEnvent());
}
}
让监听对象与被监听对象产生联系
public class StudentEnvent {
private Student student;
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
@Override
public String toString() {
return "StudentEnvent{" +
"student=" + student +
'}';
}
}
监听接口
public interface StudentListener {
void music(StudentEnvent studentEnvent);
void play(StudentEnvent studentEnvent);
}
测试
import org.junit.Test;
public class StudentTest {
@Test
public void test1(){
Student student = new Student();
//初始化监听者(匿名内部类)
student.setStudentListener(new StudentListener() {
@Override
public void music(StudentEnvent studentEnvent) {
System.out.println("监听student听音乐");
}
@Override
public void play(StudentEnvent studentEnvent) {
System.out.println("监听student玩游戏");
}
});
student.music();
student.play();
}
}
过滤器与拦截器
话说我想直接从word中复制表格过来,怎么操作啊,苦恼😤