您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“CGLIB怎么實(shí)現(xiàn)代理設(shè)計(jì)模式”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“CGLIB怎么實(shí)現(xiàn)代理設(shè)計(jì)模式”吧!
從Java的官方來講,已經(jīng)明確的要求了如果想要實(shí)現(xiàn)代理設(shè)計(jì)模式,那么一定是基于接口的應(yīng)用,所以在官方給出的Proxy類創(chuàng)建代理對(duì)象時(shí),都需要傳遞該對(duì)象所有的接口信息:
Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(),this);
但是這個(gè)時(shí)候有一部分開發(fā)者就認(rèn)為不應(yīng)該強(qiáng)迫性的基于接口實(shí)現(xiàn)代理設(shè)計(jì),所以一部分開發(fā)者就開發(fā)出了一個(gè)CGLIB開發(fā)包,利用這個(gè)開發(fā)包就可以實(shí)現(xiàn)基于類的代理設(shè)計(jì)模式。
1、CGLIB是一個(gè)第三方的程序包,需要單獨(dú)在Eclipse中進(jìn)行配置,程序包的路徑為:D:jar-libcglib-nodep-3.2.6.jar,那么需要打開Eclipse項(xiàng)目屬性安裝第三方開發(fā)包;
2、編寫程序類,該類不實(shí)現(xiàn)任何接口。
class Message {public void send() { System.out.println("【發(fā)送消息】www.mldn.cn"); } }
3、利用CGLIB編寫代理類,但是這個(gè)代理類需要做一個(gè)明確,此時(shí)相當(dāng)于使用了類的形式實(shí)現(xiàn)了代理設(shè)計(jì)的處理,所以該代理設(shè)計(jì)需要通過CGLIB來生成代理對(duì)象,定義一個(gè)代理類:
class MLDNProxy implements MethodInterceptor{ //攔截器配置private Object target; //保存真實(shí)主題對(duì)象public MLDNProxy(Object target){this.target = target; }@Overridepublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { Object returnData = null;if(this.connect()){ returnData = method.invoke(this.target,args);this.close(); }return returnData ; }public boolean connect(){ System.out.println("【消息代理】進(jìn)行消息發(fā)送通道的連接。");return true; }public void close(){ System.out.println("【消息代理】關(guān)閉消息通道。"); } }
4、此時(shí)如果想創(chuàng)建代理類對(duì)象,則就必須進(jìn)行一系列的CGLIB處理。
public class JavaAPIDemo {public static void main(String[] args)throws Exception{ Message realObject = new Message(); //真實(shí)主體對(duì)象Enhancer enhancer=new Enhancer(); //負(fù)責(zé)代理操作的程序類enhancer.setSuperclass(realObject.getClass()); //假定一個(gè)父類enhancer.setCallback(new MLDNProxy(realObject)); //設(shè)置代理類Message proxyObject= (Message) enhancer.create(); //創(chuàng)建代理對(duì)象proxyObject.send(); } }
在進(jìn)行代理設(shè)計(jì)模式定義的時(shí)候,除了使用可以接口之外,還可以不受接口限制而實(shí)現(xiàn)基于類的代理設(shè)計(jì),但從正常的設(shè)計(jì)角度來講,強(qiáng)烈建議還是基于接口的設(shè)計(jì)會(huì)比較合理。
到此,相信大家對(duì)“CGLIB怎么實(shí)現(xiàn)代理設(shè)計(jì)模式”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。