設計 模式的分類
Java互聯網企業架構技術VIP課程【騰訊課堂每特】java
提娶馬:xb2k 設計模式
課程內容緩存
站在架構角度,基於裝飾模式純手寫設計多級緩存框架架構
本節課須要知識:動態代理技術+Aop+裝飾模式+Redis緩存概念app
注意:由於該設計模式比較接近真實案例,須要有SpringBootV(cmL46679910)基礎。框架
工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。ide
適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式函數
策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。工具
完全搞懂代理模式實現原理代理模式主要對咱們方法執行以前與以後實現加強源碼分析
靜態代理須要本身人工編寫代理類代碼
public class OrderServiceProxy implements OrderService{
public interface OrderService {
public class Test001 {
|
public class OrderServiceProxy extends OrderServiceImpl {
|
動態代理不須要寫代理類對象,經過程序自動生成,而靜態代理須要咱們本身寫代理類對象。
動態代理是在實現階段不用關心代理類,而在運行階段才指定哪個對象。
動態代理類的源碼是在程序運行期間由JVM根據反射等機制動態的生成 。
JDK動態代理的通常步驟以下:
1.建立被代理的接口和類;
2.實現InvocationHandlerV(cmL46679910)接口,對目標接口中聲明的全部方法進行統一處理;
3.調用Proxy的靜態方法,建立代理類並生成相應的代理對象;
實現原理:利用攔截器機制必須實現InvocationHandler接口中的invoke方法實現對
咱們的目標方法加強。
public class JdkInvocationHandler implements InvocationHandler {
|
public class JdkInvocationHandler implements InvocationHandler {
|
JdkInvocationHandler jdkInvocationHandler = new JdkInvocationHandler(new OrderServiceImpl());
|
加上該代碼:
System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles", "true");
|
注意:繼承了Proxy類,實現了代理的接口,因爲java不能多繼承,這裏已經繼承了Proxy類了,不能再繼承其餘的類,因此JDK的動態代理不支持對實現類的代理,只支持接口的代理。
思路分析:
public class $Proxy0 implements com.mayikt.service.OrderService {
|
public class MyJdkInvocationHandler implements MayiktJdkInvocationHandler { } |
MyJdkInvocationHandler myJdkInvocationHandler = new MyJdkInvocationHandler(new OrderServiceImpl()); |
public class MyProxy {
|
|
public class MyJdkInvocationHandler implements MayiktJdkInvocationHandler {
|
利用asm字節碼技術,生成子類實現對目標方法實現加強
<dependencies> |
public class CglibMethodInterceptor implements MethodInterceptor {
|
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "D:\\code");
|
Cglib依賴於ASM字節碼技術,直接生成class文件,在採用類加載器讀取到程序中,
使用fastclass對被代理類的方法創建索引文件不須要依賴於反射查找到目標方法,因此效率比Jdk動態代理要高。
public class OrderServiceImpl$$EnhancerByCGLIB$$1dd3a71c extends OrderServiceImpl {
|
public class MayiktFastclass {
|