Java代理模式——静态代理动态代理
生活随笔
收集整理的這篇文章主要介紹了
Java代理模式——静态代理动态代理
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
proxy mode
- 1. 什么是代理
- 1.1 例子解釋
- 1.2 作用
- 2. 靜態(tài)代理
- 2.1 優(yōu)缺點(diǎn)分析
- 2.2 以廠家賣u盤用代碼說明
- 3. 動(dòng)態(tài)代理
- 3.1 什么是動(dòng)態(tài)代理
- 3.2 jdk實(shí)現(xiàn)原理
- 3.3 代碼描述
1. 什么是代理
1.1 例子解釋
1. 生活中的例子,常見的商家賣東西, 商家就是代理,工廠是目標(biāo),買東西的人是客戶端。 買東西不能找廠家買東西,工廠不賣,得找商家, 商家在其中形成了代理。 2. 房東--租房中介--租房人也是上面的關(guān)系 3. 程序中代理表示:a類訪問c類中的方法 但是c類不讓a類訪問 創(chuàng)建一個(gè)b代理 c讓b訪問1.2 作用
1.功能增強(qiáng) 在原有的功能上 新增了額外的功能 , 新增的功能, 叫功能增強(qiáng) 2.控制訪問 代理類不讓你訪問目標(biāo) 如商家不讓用戶訪問廠家 3.在項(xiàng)目中使用,使用別人的代碼,在不改變?cè)瓉砟繕?biāo)方法功能的前提下, 可以在代理中增強(qiáng)自己的功能代碼2. 靜態(tài)代理
2.1 優(yōu)缺點(diǎn)分析
代理類是自己手工實(shí)現(xiàn)的,自己創(chuàng)建一個(gè)Java類,表示代理類。你所代理的目標(biāo)是確定的,好理解 缺點(diǎn): 目標(biāo)類增多 代理類可能成倍增加 數(shù)量太多...接口中 增加功能后 會(huì)影響代理類多實(shí)現(xiàn)功能...2.2 以廠家賣u盤用代碼說明
- 實(shí)現(xiàn)的功能
- 目標(biāo)類 (a類)
- 淘寶代理類(代理b1)
- 微商代理 (代理b2)
- 客戶端(a類)
3. 動(dòng)態(tài)代理
3.1 什么是動(dòng)態(tài)代理
概念在程序執(zhí)行過程中,使用jdk的反射機(jī)制,創(chuàng)建代理類對(duì)象(無需寫代理類了),并動(dòng)態(tài)的指定要代理目標(biāo)類(廠家)。又 : 動(dòng)態(tài)代理是一種創(chuàng)建Java對(duì)象的能力,讓你不用創(chuàng)建代理類,就能創(chuàng)建代理類對(duì)象。代理目標(biāo)是活動(dòng)的,可設(shè)置的給不同的目標(biāo)隨時(shí)創(chuàng)建代理 優(yōu)點(diǎn):解決靜態(tài)代理的弊端在靜態(tài)代理中目標(biāo)類很多的時(shí)候 可使用動(dòng)態(tài)代理 修改接口中的方法 不會(huì)影響代理類3.2 jdk實(shí)現(xiàn)原理
要求:jdk的動(dòng)態(tài)代理 目標(biāo)類與代理類必須實(shí)現(xiàn)相同的接口,才可代理jdk動(dòng)態(tài)代理實(shí)現(xiàn):InvocationHandler: 只有一個(gè)invoke()方法,里面寫代理類實(shí)現(xiàn)的功能 1. 調(diào)用目標(biāo)類方法 2. 實(shí)現(xiàn)功能增強(qiáng)public Object invoke(Object proxy, Method method, Object[] args)InvocationHandler 接口:表示你的代理要干什么。使用: 1. 創(chuàng)建類實(shí)現(xiàn)接口 InvocationHandler2. 重寫invoke方法,把原來靜態(tài)代理中代理類要完成的功能寫在invoke中Method 類 method.invoke(目標(biāo)對(duì)象,"參數(shù)值")Proxy 類 使用proxy類的方法 表示創(chuàng)建對(duì)象 代替newProxy.newProxyInstance(more args...); 創(chuàng)建代理對(duì)象public static Object newProxyInstace(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h)代理目標(biāo)類, 創(chuàng)建代理類對(duì)象(返回值)參數(shù)1. ClassLoader loader 類加載器,負(fù)責(zé)向內(nèi)存中加載對(duì)象。目標(biāo)對(duì)象的類加載器。a.getClass().getClassLoader()2. Class<?>[] interfaces 目標(biāo)對(duì)象實(shí)現(xiàn)的接口3. InvocationHandler 代理類要完成的功能3.3 代碼描述
- 功能接口
- 目標(biāo)類
- 代理類要干什么(實(shí)現(xiàn)目標(biāo)||功能增強(qiáng))
- 創(chuàng)建代理對(duì)象,實(shí)現(xiàn)動(dòng)態(tài)代理需求
- 關(guān)于動(dòng)態(tài)代理另一種實(shí)現(xiàn)cglib
總結(jié)
以上是生活随笔為你收集整理的Java代理模式——静态代理动态代理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js怎么调用wasm_Long.js源码
- 下一篇: new一个数组