使用动态代理解决网站字符集编码问题:(之前通过拦截器)
使用動態代理解決網站字符集編碼問題:(之前通過攔截器)
?
設計模式:
在軟件開發的過程中,遇到相識的問題,將問題的解決方式抽象為模型(套路)
單例模式(靜態代碼只會執行一次),工廠模式,動態代理,裝飾者模式,適配器
?
裝飾者模式的介紹:
谷歌汽車場景:
1. Java設計了汽車開發的約定
interface ICar(start,run,stop)
class GoogleCar implements ICar{}
2. 希望在將谷歌car接入生態圈時候,增強汽車啟動的功能
3.考慮的方向有:直接修改GoogleCar源碼;使用繼承
4. 二次開發的時候,如果無法獲得源碼,并且無法使用繼承,final class,如果需要增強某個對象的一個方法的時候,要考慮裝飾者模式。
前提是:可以獲取到被裝飾 的對象GoogleCar實現的所有接口,(ICar)
實現思路:自定義裝飾類實現ICar接口,為自定義裝飾類傳遞被裝飾的對象(即:
main函數new的時候是這樣的
ICar car = new MyCar(new GoogleCar())
)
ICar接口:對外公開的
谷歌開發的car,源碼不對外開放:
我自己開發的car,增加一個有參構造器,實現ICar
?
啟動main函數:記得構造器的參數要傳入GoogleC對象:
這個就是所謂的裝飾者模式。
?
?
裝飾者的弊端:如果被實現的接口方法太多,裝飾類中的方法過多冗余
解決方法:
動態代理模式:(代理對象)==》用于方法增強
原理:通過虛擬機在內存中創建類似于MyCar.class文件
? ?要創建class文件告訴虛擬機:
1. 被創建的字節碼文件應該有多少方法
2. 創建一個代理對象來增強這些方法
?
?
?
1. 字節碼加載器:JDK有一些程序,專業將各種字節碼文件加載到內存,這類程序簡稱字節碼加載器
2. 如何將字節碼文件class文件加載到內存?
底層實現過程是利用IO流技術,獲取文件中的數據加載到內存,然后進行判斷和檢查。
加載器主要有三種:引導類加載器(BookStrapClassLoader),擴展類加載器(extensionClassLoader,ext),
應用類加載器(APPClassLoader,自定義的類)
?
?
?
?
?
?
?
?
?
?
?
?
總結
以上是生活随笔為你收集整理的使用动态代理解决网站字符集编码问题:(之前通过拦截器)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Collection框架介绍
- 下一篇: Linux进阶之路————Linux运行