Ⅰ JAVA高級架構師基礎功:Spring中AOP的兩種代理方式:動態代理和CGLIB詳解
在Spring框架中,AOP的兩種代理方式是動態代理和CGLIB代理。以下是這兩種代理方式的詳解:
動態代理: 實現機制:動態代理在程序運行時創建代理對象,基於Java的反射機制生成一個實現了特定介面的新類。 代理邏輯:新類包含代理邏輯,如日誌記錄、安全檢查、事務管理等,通過反射調用目標對象的方法。 創建方式:通常通過實現InvocationHandler介面來創建自定義的調用處理器,並通過Proxy類的newProxyInstance方法來創建代理類實例。 優勢:代理類與目標類完全解耦,易於維護和擴展。適用於目標對象實現了介面的場景。
CGLIB代理: 實現機制:CGLIB是一個用於代碼生成的類庫,允許在運行時動態生成子類。 代理邏輯:通過修改位元組碼實現代理邏輯,無需修改目標類。可以對沒有實現介面的類提供AOP支持。 創建方式:生成的代理類通過繼承目標類來實現AOP邏輯,從而對原有類的方法進行增強。 優勢:更加靈活,適用於目標對象未實現介面的場景。但涉及位元組碼操作,可能對類載入器造成一定影響。
選擇代理方式的主要考慮因素: 動態代理適用於已實現介面的類。 CGLIB代理適用於未實現介面的類,提供更靈活的AOP支持。 Spring通常會自動在動態代理和CGLIB之間進行轉換,以適應不同的使用情況。