-
1 # 量子匯
-
2 # 此生唯一
在此之前,我們先來明白下什麼是代理?
代理是委託者委託特定的行為給代理者來操作,從而解放自身的一種模式!在這個過程中,代理者的操作都是委託者提供的,並沒有自己的服務,代理者把最後的結果返回給委託者!
怎麼通俗易懂的理解代理呢?比如說你有一個王者榮耀的帳號,才青銅一,太低了有木有?然後你找了個代練,把帳號給他(你自己該幹嘛幹嘛,委託類不用再關心代理類),他給你一口氣打到了王者階段!這個過程中,升級,配置銘文,獲取金幣這些操作都是用你的帳號做的(代理類呼叫委託類的API),最後把帳號還你(代理類把最後結果給委託類)!
代理很簡單,是不是?當然,代理也有靜態代理和動態代理之分!
靜態代理:代理類在編譯期就已經確定,生成為class檔案,在執行期直接呼叫!
動態代理:代理類的位元組碼(class檔案)在執行時,才動態生成並呼叫!
怎麼通俗易懂的區分呢?比如你去買車,跟商家商量好了,說是你一去,讓老王(隔壁的)帶你看車,(這個時候的老王已經確定了),這個老王就是靜態代理!或者有些商家直接跟你說,你來吧,來了我給你找個漂亮姑娘(不確定是誰)帶你看車,這個姑娘類就是動態代理!你去了才會確定!
為什麼要使用動態代理?因為方便程式設計啊。。就用上個例子來看,如果用靜態代理,老闆要跟顧客說,等你過來,讓小麗,小美,小花帶你看車哈!(分別生成不同的代理類,很麻煩是不?)
比如說你使用了動態代理模型寫程式碼,當新增一個處理類的時候,你只用新增實現(繼承或者實現介面),原來的那個代理類不用改任何東西!
JAVA中怎麼使用動態代理呢?java.lang.reflect中的InvocationHandler介面和Proxy類可以實現!具體小Demo不好貼程式碼,可以找我索取!
spring框架就是因為使用了大量的代理類,簡化程式設計所以才有那麼多粉絲的!有一句話叫做,學好spring,走遍天下都不怕!
更多技術分享,敬請關注。。。
回覆列表
動態代理,一般作用在寫框架中,還有切面程式設計的時候也需要用到,其實原理就是不需要自己去修改自己一開始寫好的底層的方法,動態代理會自動幫你生成好,Java一般分為,jdk代理和cglib代理