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

Spring AOP 攔截 Jar 包內部方法:指定完整類路徑即可織入

     編輯:程式設計綜合問答

問題:Spring AOP 能否攔截封裝在第三方 JAR(如 JDBC 驅動)中的方法(例如 Driver.connect())?

答案:可以

Spring AOP 基於動態代理(JDK Proxy 或 CGLIB),**僅能攔截 Spring 容器管理的 Bean 方法呼叫**。若目標類**非**由 Spring 管理(如 DriverManager.getConnection() 內部 new Driver()),**無法直接攔截**。

可行方案

  1. 將第三方類包裝為 Spring Bean:
    @Bean
    public Driver mysqlDriver() { return new com.mysql.jdbc.Driver(); }
    
    再對此 Bean 的方法切面。
  2. 使用 Java Agent / ByteBuddy / AspectJ LTW (Load-Time Weaving):在類載入時期織入,**不受 Spring 容器限制**,可攔截任何類(含 JAR 內部、JDK 核心類)。
  3. JDBC 專用: 使用 p6spy、druid、flexy-pool 等現成監控庫,無需自寫切面。

純 Spring AOP 只能攔截「Spring Bean 的方法呼叫」,跨越此邊界需 LTW 或 Agent。

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