首頁 >Java >java教程 >spring動態代理有哪些實作方式

spring動態代理有哪些實作方式

百草
百草原創
2024-01-08 10:07:34751瀏覽

spring動態代理的實作方式:1、JDK動態代理程式;2、CGLIB動態代理程式。詳細介紹:1、JDK動態代理,是利用了JDK的反射機制,它要求被代理的對象必須實現至少一個接口,在運行時,Spring會通過反射機制獲取到被代理對象的所有接口,然後為這些介面建立一個InvocationHandler對象,該物件實作了所有的介面方法,並且會把所有方法呼叫都轉發到一個Handler等等。

spring動態代理有哪些實作方式

本教學作業系統:windows10系統、DELL G3電腦。

Spring框架提供了兩種類型的代理:JDK動態代理程式和CGLIB動態代理程式。

1、JDK動態代理:

JDK動態代理程式是利用了JDK的反射機制,它要求被代理的物件必須實作至少一個介面。在運行時,Spring會透過反射機制取得到被代理對象的所有接口,然後為這些接口創建一個InvocationHandler對象,該對象實現了所有的接口方法,並且會把所有方法調用都轉發到一個Handler對像上,這個Handler物件包含了所有的代理邏輯。因此,使用JDK動態代理,你的類別必須實作至少一個介面。

範例程式碼:

@Service  
public class MyServiceImpl implements MyService {  
    // 实现接口方法  
}  
  
@Component  
public class MyComponent {  
    @Autowired  
    private MyService myService;  
}

2、CGLIB動態代理程式:

CGLIB動態代理程式是利用了字節碼技術,它可以在運行時動態地建立一個子類,並覆寫需要代理的方法。因此,使用CGLIB動態代理,你的類別不需要實作任何介面。如果你的類別沒有實作任何接口,Spring就會使用CGLIB動態代理來建立代理對象。

範例程式碼:

@Service  
public class MyServiceImpl {  
    // 实现业务逻辑  
}  
  
@Component  
public class MyComponent {  
    @Autowired  
    private MyService myService;  
}

在Spring中,預設會使用JDK動態代理來建立代理物件。如果你想讓Spring使用CGLIB動態代理來建立代理對象,你可以在你的設定檔中加入以下設定:

<aop:config proxy-target-class="true">  
    <!-- 其他配置 -->  
</aop:config>

以上是spring動態代理有哪些實作方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn