摘要:代理模式的意圖很多,比如安全原因,遠(yuǎn)程調(diào)用等。這里主要討論使用代理模式實(shí)現(xiàn)延遲加載,從而提升系統(tǒng)的性能和反應(yīng)速度。是低級的字節(jié)碼生成工具,使用已經(jīng)近乎于在使用編程,對開發(fā)人員要求更高,當(dāng)然也是性能最好的一種動態(tài)代理生成工具。
代理模式的意圖很多,比如:安全原因,遠(yuǎn)程調(diào)用等。這里主要討論使用代理模式實(shí)現(xiàn)延遲加載,從而提升系統(tǒng)的性能和反應(yīng)速度。
延遲加載的核心思想是:如果當(dāng)前并沒有使用這個組件,則不需要真正地初始化它,使用一個代理對象替代它的原有的位置,只要在真正需要使用的時候,才對它進(jìn)行加載。
代理模式的實(shí)現(xiàn)和使用代理分為幾種
靜態(tài)代理
為每一個代理寫一個方法,其實(shí)是挺煩的。接口有變動,真實(shí)主題與代理類都要修改。
動態(tài)代理
解決了上面問題,同時可以在運(yùn)行時指定代理類的執(zhí)行邏輯,從而大大提升系統(tǒng)的靈活性。 動態(tài)代理又分JDK自帶的動態(tài)代理,CGLIB,Javassist或者ASM庫。 ASM是低級的字節(jié)碼生成工具,使用ASM已經(jīng)近乎于在使用Java bytecode編程,對開發(fā)人員要求更高,當(dāng)然也是性能最好的一種動態(tài)代理生成工具。但ASM的使用是在過于繁鎖,而且性能也沒有數(shù)量級的提升,與CGLIB等高級字節(jié)碼生成工具相比,ASM程序的維護(hù)性也較差,如果不是在對性能有苛刻要求的場合,建議還是使用CGLIB或Javassist 實(shí)際測試中,JDK的動態(tài)類創(chuàng)建過程很快,這是因?yàn)樵谶@個內(nèi)置實(shí)現(xiàn)中defineClass()方法被定義為native實(shí)現(xiàn),故性能高于其它幾種實(shí)現(xiàn)。但在代理類的函數(shù)調(diào)用性能上,JDK的動態(tài)代理就不如CGLIB和Javassist的基于動態(tài)代理的代理。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/65407.html
摘要:在他的重學(xué)前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識,其實(shí)都是來自于實(shí)踐和工作中零散的學(xué)習(xí)。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。 開篇 前端開發(fā)是一個非常特殊的行業(yè),它的歷史實(shí)際上不是很長,但是知識之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學(xué)前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研...
摘要:在他的重學(xué)前端課程中提到到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系中的重要崗位之一。大部分前端工程師的知識,其實(shí)都是來自于實(shí)踐和工作中零散的學(xué)習(xí)。一基礎(chǔ)前端工程師吃飯的家伙,深度廣度一樣都不能差。開篇 前端開發(fā)是一個非常特殊的行業(yè),它的歷史實(shí)際上不是很長,但是知識之繁雜,技術(shù)迭代速度之快是其他技術(shù)所不能比擬的。 winter在他的《重學(xué)前端》課程中提到: 到現(xiàn)在為止,前端工程師已經(jīng)成為研發(fā)體系...
摘要:是的簡稱,運(yùn)行環(huán)境,為的運(yùn)行提供了所需的環(huán)境。分割字符串,返回分割后的字符串?dāng)?shù)組。當(dāng)計(jì)算的值相同時,我們稱之為沖突,的做法是用鏈表和紅黑樹存儲相同的值的。迭代器取代了集合框架中的,迭代器允許調(diào)用者在迭代過程中移除元素。 Java基礎(chǔ)1.JDK和JRE有什么區(qū)別? JDK 是java development kit的簡稱,java開發(fā)工具包,提供java的開發(fā)環(huán)境和運(yùn)行環(huán)境。JRE 是j...
摘要:的簡稱,運(yùn)行環(huán)境,為的運(yùn)行提供了所需環(huán)境。分割字符串,返回一個分割后的字符串?dāng)?shù)組。線程安全是線程安全的,而是非線程安全的。迭代器取代了集合框架中的,迭代器允許調(diào)用者在迭代過程中移除元素。 本文分為十九個模塊,分別是:?Java 基礎(chǔ)、容器、多線程、反射、對象拷貝、Java Web 、異常、網(wǎng)絡(luò)、設(shè)計(jì)模式、Spring/Spring MVC、Spring Boot/Spring Clou...
閱讀 1964·2021-11-16 11:45
閱讀 3680·2021-09-06 15:02
閱讀 2026·2019-08-30 15:44
閱讀 2291·2019-08-30 11:21
閱讀 1854·2019-08-29 16:31
閱讀 3428·2019-08-29 13:55
閱讀 1900·2019-08-29 12:15
閱讀 3255·2019-08-28 18:05