监听器——Listener(简述、自定义监听器) 略,过滤器与拦截器

本文通过一个简单例子介绍了监听器的工作原理及其实现方式。监听器是一种Java程序,用于监听另一个对象的状态变化,如方法调用或属性更改等。文章还提到了如何自定义监听器,并通过观察者设计模式实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

监听器

    略,不怎么使用了。

    见名知意,比如你上课玩手机,亲爱的班主任静悄悄地出现在你身后。你就是“被监听的对象”,班主任就”监听者“,你因为玩手机触发了这个事件,导致你班主任来“慰问”你。
    监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。利用观察者设计模式就可以定义实现监听器了。

Tomcat提供了三个对象的监听器:
      分别监听对象的创建和销毁,对象属性的变化,以及监听httpsession中对象的绑定和解绑定。随着web应用的启动而启动,销毁而销毁,只初始化一次。

  1. ServletContextListener
  2. HttpSessionListener
  3. 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中复制表格过来,怎么操作啊,苦恼😤

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈年_H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值