首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JavaWeb 監聽器 Listener 實戰詳解:從觀察者模式到 Servlet 監聽

     編輯:Java 相關知識

什麼是監聽器

監聽器是實現特定接口的普通 Java 類,專門監聽另一個類的方法調用或狀態變化。本質是觀察者模式:定義對象間一對多依賴,當主題對象狀態改變時,所有依賴者自動收到通知並更新。

觀察者模式三大核心角色

  • 事件源:被監聽的對象(如按鈕、Person)。
  • 監聽器:註冊到事件源,處理事件的回調對象。
  • 事件對象:封裝事件狀態與源信息的載體。

手寫簡易監聽器演示

1. 定義監聽接口

interface IPersonRunListener {
    void fighting(PersonEvent pe);
}

2. 事件對象

class PersonEvent {
    private Person source;
    public PersonEvent(Person source) { this.source = source; }
    public Person getSource() { return source; }
    public String getName() { return source.getName(); }
}

3. 事件源

class Person {
    private String name;
    private IPersonRunListener listener;
    public Person(String name) { this.name = name; }
    public void run() {
        System.out.println(name + " 開始跑了..");
        if (listener != null) listener.fighting(new PersonEvent(this));
    }
    public void addListener(IPersonRunListener l) { this.listener = l; }
    public String getName() { return name; }
}

4. 測試

public class Demo {
    public static void main(String[] args) {
        Person p1 = new Person("張三");
        p1.addListener(pe -> {
            System.out.println(pe.getSource() + " 已經跑完了...");
            if ("張三".equals(pe.getName())) System.out.println("張三跑到了第一名!");
        });
        p1.run();
    }
}

Servlet 標準監聽器分類

web.xml 註冊示例

<listener>
    <listener-class>com.example.MyContextListener</listener-class>
</listener>

Spring Boot 中使用

@Component
public class MyContextListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("應用啟動,初始化緩存...");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("應用關閉,釋放資源...");
    }
}

總結

從手寫觀察者模式到 Servlet 標準監聽器,核心思想一致:解耦事件源與處理邏輯。掌握監聽器機制,能優雅實現應用啟動初始化、會話管理、請求攔截等橫切關注點。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
接口監聽對象典型用途
ServletContextListenerWeb 應用上下文項目啟動初始化、關閉銷毀資源
HttpSessionListener用戶 Session在線人數統計、Session 創建銷毀日誌
ServletRequestListenerHTTP 請求請求耗時統計、參數記錄
ServletContextAttributeListener上下文屬性變更共享數據變更通知
HttpSessionAttributeListenerSession 屬性變更購物車商品增減同步