@PostConstruct
?是 Java EE(現 Jakarta EE)中的一個注解,用于標記一個方法在對象初始化完成后立即執行。它在 Spring 框架、Java Web 應用等場景中廣泛使用,主要用于資源初始化、依賴注入完成后的配置等操作。
1. 基本作用
-
執行時機:
- 在對象實例化(通過構造器創建)并完成依賴注入(如?
@Autowired
?注入 Bean)后,且在該 Bean 投入使用前執行。 - 僅執行一次,確保資源初始化邏輯只運行一次。
- 在對象實例化(通過構造器創建)并完成依賴注入(如?
-
典型場景:
- 初始化資源(如數據庫連接、網絡客戶端)。
- 加載配置文件或緩存數據。
- 驗證依賴注入的正確性。
2. 使用條件
-
方法要求:
- 返回類型:必須為?
void
。 - 參數:不能有參數。
- 訪問修飾符:通常為?
public
、protected
?或默認(package-private
),但不能是?private
(某些容器可能允許,但不推薦)。 - 靜態方法:不允許(因靜態方法屬于類,而非實例)。
- 拋出異常:可以拋出受檢異常(如?
IOException
)。
- 返回類型:必須為?
-
依賴環境:
- 需要 JSR-250 規范支持(Java EE 5+ 或 Jakarta EE)。
- Spring 框架從 2.5 版本開始支持該注解。
@PreDestroy
?是 Java EE(現 Jakarta EE)中的一個注解,用于標記一個方法在對象被銷毀前執行。它與?@PostConstruct
?相對應,主要用于資源釋放、清理操作,確保對象在生命周期結束時正確釋放占用的資源(如關閉數據庫連接、停止線程、釋放文件句柄等)。
?@PreDestroy
1. 基本作用
-
執行時機:
- 在對象被容器銷毀前(如 Spring 容器關閉、Servlet 實例銷毀)執行。
- 僅執行一次,確保資源釋放邏輯只運行一次。
-
典型場景:
- 關閉數據庫連接或網絡客戶端。
- 停止后臺線程或定時器。
- 釋放文件鎖或臨時資源。
2. 使用條件
-
方法要求:
- 返回類型:必須為?
void
。 - 參數:不能有參數。
- 訪問修飾符:通常為?
public
、protected
?或默認(package-private
),但不能是?private
(某些容器可能允許,但不推薦)。 - 靜態方法:不允許(因靜態方法屬于類,而非實例)。
- 拋出異常:可以拋出受檢異常,但建議捕獲并記錄,避免影響容器銷毀流程。
- 返回類型:必須為?
-
依賴環境:
- 需要 JSR-250 規范支持(Java EE 5+ 或 Jakarta EE)。
- Spring 框架從 2.5 版本開始支持該注解。
?