首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java 多頁面共用方法僅執行一次:設計模式與實作策略

     編輯:程式設計綜合問答

需求:兩個頁面先後呼叫同一方法,但業務邏輯要求全局僅執行一次。這通常是設計錯誤的徵兆,應先釐清業務語境再決定技術方案。

反模式識別

  • 「兩個頁面呼叫同一方法」暗示方法屬於共用服務層,而非頁面專屬邏輯。
  • 「僅執行一次」意味著有狀態依賴,違反無狀態服務原則。

若確有必要,三種實作方式

1. 單例模式 + 執行旗標(記憶體內)

public class OnceService {
    private static OnceService instance = new OnceService();
    private boolean executed = false;
    private OnceService() {}
    public static OnceService getInstance() { return instance; }
    public synchronized void doOnce() {
        if (executed) return;
        // 核心邏輯
        executed = true;
    }
}

2. 檔案/資料庫持久化旗標(跨進程/重啟生效)

public void doOnce() {
    File flag = new File("/tmp/once.flag");
    if (flag.exists()) return;
    // 核心邏輯
    flag.createNewFile(); // 原子性建立
}

3. Spring @PostConstruct / ServletContextListener(應用啟動時執行)

若邏輯屬於初始化類,直接在 Bean 初始化或 Web 容器啟動時執行,避免頁面觸發。

架構建議

  • 將共用邏輯下沉至 Service 層,由 Controller/頁面注入呼叫。
  • 使用 @Transactional 保證資料一致性。
  • 若為定時/排程任務,改用 @Scheduled 或 Quartz。

核心原則:不要在頁面層控制執行次數,交給服務層或基礎設施層管理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved