动态代理

发布时间:2019-11-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了动态代理脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

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,大家一起学习交流。

脚本宝典总结

以上是脚本宝典为你收集整理的动态代理全部内容,希望文章能够帮你解决动态代理所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。