摘要:定義代理設計模式為其他對象提供一種代理以控制對這個對象的訪問。動態代理代理類在程序運行時創建的代理方式被成為動態代理。
1.定義
代理設計模式:為其他對象提供一種代理以控制對這個對象的訪問。
動態代理:代理類在程序運行時創建的代理方式被成為 動態代理。代理類并不是在Java代碼中定義的,而而是在運行時根據我們在Java代碼中的“指示”動態生成的
2.簡介
Sping mvc的Aop就是基于動態代理實現的,通過它我們可以很方便的進行日志記錄,性能統計,安全控制,事務處理,異常處理等,而不用更改業務邏輯
3.類圖
image.png
4.實例
package designMode;
import java.io.IOException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
代理設計模式:為其他對象提供一種代理以控制對這個對象的訪問。
動態代理:代理類在程序運行時創建的代理方式被成為 動態代理。代理類并不是在Java代碼中定義的,而是在運行時根據我們在Java代碼中的“指示”動態生成的
*/
public class ProxyPattern {
public static void main(String[] args) throws IOException { Aop aop1 = new Aop(); Subject subject = (Subject) new AopHandler().bind(aop1); subject.doSometing(); } /** * 接口Subject */ interface Subject { void doSometing(); } /** * 要代理的對象(RealSubject) */ static class Aop implements Subject { @Override public void doSometing() { System.out.println("保存數據...."); } } /** * 代理類(InvocationHandler ) */ public static class AopHandler implements InvocationHandler { private Object delegate; //運行時創建代理類 public Object bind(Object delegate) { this.delegate = delegate; return Proxy.newProxyInstance( this.delegate.getClass().getClassLoader(), this.delegate.getClass().getInterfaces(), this ); } //動態代理可以很方便的面向切面編程 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("開啟事務..."); method.invoke(delegate); System.out.println("提交事務..."); return null; } }
}
歡迎加入學習交流群569772982,大家一起學習交流。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67764.html
摘要:要明白,動態代理類的存在意義是為了攔截方法并修改邏輯而動態代理的局限性之一就是只能攔截接口所聲明的方法。因為動態代理類是繼承自業務類,所以該類和方法不能聲明成無法繼承或重寫。者最終都是生成了一個新的動態代理類對象。 動態代理 1、先談靜態代理 對于靜態代理,我們已經很熟悉了。我們擁有一個抽象類,真實類繼承自抽象類并重寫其業務方法,代理類持有真實類的對象實例,在重寫業務方法中通過調用真實...
摘要:這種語法,在中被稱為動態代理。在動態代理機制中,這個角色只能是接口。動態代理就是實現的技術之一。 所謂動態代理,指的是語言提供的一種語法,能夠將對對象中不同方法的調用重定向到一個統一的處理函數中來。python重寫__getattr__函數能夠做到這一點,就連世界上最好的語言也提供稱為魔術方法的__call。這種語法除了能更好的實現動態代理外,還是RPC框架實現原理的一部分。 動態代理...
摘要:動態代理又被稱為代理或接口代理。靜態代理在編譯時產生字節碼文件,可以直接使用,效率高。代理無需實現接口,通過生成類字節碼實現代理,比反射稍快,不存在性能問題,但會繼承目標對象,需要重寫方法,所以目標對象不能為類。 一、代理模式介紹 代理模式是一種設計模式,提供了對目標對象額外的訪問方式,即通過代理對象訪問目標對象,這樣可以在不修改原目標對象的前提下,提供額外的功能操作,擴展目標對象的功...
摘要:類所實現的方法包裝了對被代理對象的反射調用,后文中的動態代理類正是調用此方法來調用被代理對象的方法。 前言 java的設計模式中有一項設計模式叫做代理模式,所謂代理模式,就是通過代理方來操作目標對象,而不是自己直接調用。代理又分為靜態代理和動態代理,靜態代理就是針對每個被代理對象寫一個代理類,操作不夠優雅;動態代理,可以根據接口動態的生成代理類,這動態生成的類不需要自己書寫,jdk幫你...
摘要:代理模式基本概念不論是靜態代理還是動態代理其本質都是代理模式的一種實現那么什么是代理模式呢代理模式即給某一個對象提供一個代理并由代理對象控制對原對象的引用代理模式其實取材于實際生活例如我們生活中常見的房屋租賃代理我們在租房時一般不是直接和房 代理模式 基本概念 不論是靜態代理還是動態代理, 其本質都是代理模式的一種實現, 那么什么是代理模式呢?代理模式, 即給某一個對象提供一個代理, ...
摘要:除了和外,我們還有最后一招我直接把一個代理類的源代碼用字符串拼出來,然后基于這個字符串調用的編譯期,動態的創建一個新的文件,然后動態編譯這個文件,這樣也能得到一個新的代理類。 面試問題:Java里的代理設計模式(Proxy Design Pattern)一共有幾種實現方式?這個題目很像孔乙己問茴香豆的茴字有哪幾種寫法? showImg(https://segmentfault.com/...
閱讀 1936·2021-11-15 17:58
閱讀 2131·2021-10-19 11:45
閱讀 3482·2021-09-02 15:40
閱讀 2595·2021-07-25 10:50
閱讀 3745·2019-08-30 15:56
閱讀 3146·2019-08-30 12:44
閱讀 1028·2019-08-26 13:38
閱讀 1869·2019-08-23 18:29