摘要:定义代理设计模式为其他对象提供一种代理以控制对这个对象的访问。动态代理代理类在程序运行时创建的代理方式被成为动态代理。
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,大家一起学习交流。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/67764.html
摘要:要明白,动态代理类的存在意义是为了拦截方法并修改逻辑而动态代理的局限性之一就是只能拦截接口所声明的方法。因为动态代理类是继承自业务类,所以该类和方法不能声明成无法继承或重写。者最终都是生成了一个新的动态代理类对象。 动态代理 1、先谈静态代理 对于静态代理,我们已经很熟悉了。我们拥有一个抽象类,真实类继承自抽象类并重写其业务方法,代理类持有真实类的对象实例,在重写业务方法中通过调用真实...
摘要:这种语法,在中被称为动态代理。在动态代理机制中,这个角色只能是接口。动态代理就是实现的技术之一。 所谓动态代理,指的是语言提供的一种语法,能够将对对象中不同方法的调用重定向到一个统一的处理函数中来。python重写__getattr__函数能够做到这一点,就连世界上最好的语言也提供称为魔术方法的__call。这种语法除了能更好的实现动态代理外,还是RPC框架实现原理的一部分。 动态代理...
摘要:动态代理又被称为代理或接口代理。静态代理在编译时产生字节码文件,可以直接使用,效率高。代理无需实现接口,通过生成类字节码实现代理,比反射稍快,不存在性能问题,但会继承目标对象,需要重写方法,所以目标对象不能为类。 一、代理模式介绍 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功...
摘要:类所实现的方法包装了对被代理对象的反射调用,后文中的动态代理类正是调用此方法来调用被代理对象的方法。 前言 java的设计模式中有一项设计模式叫做代理模式,所谓代理模式,就是通过代理方来操作目标对象,而不是自己直接调用。代理又分为静态代理和动态代理,静态代理就是针对每个被代理对象写一个代理类,操作不够优雅;动态代理,可以根据接口动态的生成代理类,这动态生成的类不需要自己书写,jdk帮你...
摘要:代理模式基本概念不论是静态代理还是动态代理其本质都是代理模式的一种实现那么什么是代理模式呢代理模式即给某一个对象提供一个代理并由代理对象控制对原对象的引用代理模式其实取材于实际生活例如我们生活中常见的房屋租赁代理我们在租房时一般不是直接和房 代理模式 基本概念 不论是静态代理还是动态代理, 其本质都是代理模式的一种实现, 那么什么是代理模式呢?代理模式, 即给某一个对象提供一个代理, ...
摘要:除了和外,我们还有最后一招我直接把一个代理类的源代码用字符串拼出来,然后基于这个字符串调用的编译期,动态的创建一个新的文件,然后动态编译这个文件,这样也能得到一个新的代理类。 面试问题:Java里的代理设计模式(Proxy Design Pattern)一共有几种实现方式?这个题目很像孔乙己问茴香豆的茴字有哪几种写法? showImg(https://segmentfault.com/...
阅读 1945·2021-11-15 17:58
阅读 2133·2021-10-19 11:45
阅读 3486·2021-09-02 15:40
阅读 2597·2021-07-25 10:50
阅读 3748·2019-08-30 15:56
阅读 3150·2019-08-30 12:44
阅读 1031·2019-08-26 13:38
阅读 1872·2019-08-23 18:29