一 什么是代理????
? ? ? ? 給目標對象提供一個代理對象,由代理對象管理對目標對象的引用躺盛;
? ? ? ? 例如對象A 提供某功能,現(xiàn)在C要使用A? ?但C并不直接引用A? ?C引用B? ?B管理對A的引用,這里A被B代理了故爵。
? ? ? ? 代理的目的是 降低目標對象對系統(tǒng)帶來的復(fù)雜性,通過代理對象對原有的業(yè)務(wù)進行增強隅津。
1.1靜態(tài)代理:
????????被代理的類在編譯運行前已經(jīng)確定其類型诬垂,隨著被代理對象新增劲室,業(yè)務(wù)逐漸復(fù)雜,可維護性降低结窘,適合一般業(yè)務(wù)場景很洋,代理較少的時候,違反設(shè)計原則中的開閉原則
?1.2 動態(tài)代理
? ? ? ? 被代理類在運行時才能確定其類型隧枫,方法執(zhí)行通過反射方式動態(tài)獲取執(zhí)行喉磁;
? ??
二 動態(tài)代理原理
? ? ? ? ? ? 類的完整生命周期:
? ? ? ? ? ? .java 文件---(編譯)-------》? .class文件-----(類加載)-----》Class對象-----(實例化)----》實例對象----------》卸載-----------》? .java 文件
? .class文件 本質(zhì)是01二進制串,可以存放在硬盤和內(nèi)存中官脓。
追蹤源碼可得协怒,最終動態(tài)生成的代理類 ¥Proxy+num實現(xiàn)了Proxy 以及方法所在的接口,方法實現(xiàn)最終調(diào)用
InvocationHandler的?invoke方法卑笨。