創(chuàng)新互聯(lián)www.cdcxhl.cn八線動(dòng)態(tài)BGP香港云服務(wù)器提供商,新人活動(dòng)買(mǎi)多久送多久,劃算不套路!
這篇文章將為大家詳細(xì)講解有關(guān)利用java實(shí)現(xiàn)動(dòng)態(tài)代理的方法,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
java 動(dòng)態(tài)代理的方法總結(jié)
AOP的攔截功能是由java中的動(dòng)態(tài)代理來(lái)實(shí)現(xiàn)的。說(shuō)白了,就是在目標(biāo)類的基礎(chǔ)上增加切面邏輯,生成增強(qiáng)的目標(biāo)類(該切面邏輯或者在目標(biāo)類函數(shù)執(zhí)行之前,或者目標(biāo)類函數(shù)執(zhí)行之后,或者在目標(biāo)類函數(shù)拋出異常時(shí)候執(zhí)行。不同的切入時(shí)機(jī)對(duì)應(yīng)不同的Interceptor的種類,如BeforeAdviseInterceptor,AfterAdviseInterceptor以及ThrowsAdviseInterceptor等)。
那么動(dòng)態(tài)代理是如何實(shí)現(xiàn)將切面邏輯(advise)織入到目標(biāo)類方法中去的呢?下面我們就來(lái)詳細(xì)介紹并實(shí)現(xiàn)AOP中用到的兩種動(dòng)態(tài)代理。
AOP的源碼中用到了兩種動(dòng)態(tài)代理來(lái)實(shí)現(xiàn)攔截切入功能:jdk動(dòng)態(tài)代理和cglib動(dòng)態(tài)代理。兩種方法同時(shí)存在,各有優(yōu)劣。jdk動(dòng)態(tài)代理是由Java內(nèi)部的反射機(jī)制來(lái)實(shí)現(xiàn)的,cglib動(dòng)態(tài)代理底層則是借助asm來(lái)實(shí)現(xiàn)的??偟膩?lái)說(shuō),反射機(jī)制在生成類的過(guò)程中比較高效,而asm在生成類之后的相關(guān)執(zhí)行過(guò)程中比較高效(可以通過(guò)將asm生成的類進(jìn)行緩存,這樣解決asm生成類過(guò)程低效問(wèn)題)。還有一點(diǎn)必須注意:jdk動(dòng)態(tài)代理的應(yīng)用前提,必須是目標(biāo)類基于統(tǒng)一的接口。如果沒(méi)有上述前提,jdk動(dòng)態(tài)代理不能應(yīng)用。由此可以看出,jdk動(dòng)態(tài)代理有一定的局限性,cglib這種第三方類庫(kù)實(shí)現(xiàn)的動(dòng)態(tài)代理應(yīng)用更加廣泛,且在效率上更有優(yōu)勢(shì)。。
1、定義接口和實(shí)現(xiàn)
package com.meituan.hyt.test3.service; public interface UserService { public String getName(int id); public Integer getAge(int id); } package com.meituan.hyt.test3.service.impl; import com.meituan.hyt.test3.service.UserService; public class UserServiceImpl implements UserService { @Override public String getName(int id) { System.out.println("------getName------"); return "Tom"; } @Override public Integer getAge(int id) { System.out.println("------getAge------"); return 10; } }
文章標(biāo)題:利用java實(shí)現(xiàn)動(dòng)態(tài)代理的方法-創(chuàng)新互聯(lián)
地址分享:http://chinadenli.net/article30/ddgcso.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、網(wǎng)站營(yíng)銷(xiāo)、小程序開(kāi)發(fā)、電子商務(wù)、搜索引擎優(yōu)化、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容