美文网首页
七.动态代理

七.动态代理

作者: 蜗牛1991 | 来源:发表于2017-10-13 11:19 被阅读0次

1.定义

代理设计模式:为其他对象提供一种代理以控制对这个对象的访问。
动态代理:代理类在程序运行时创建的代理方式被成为 动态代理。代理类并不是在Java代码中定义的,而而是在运行时根据我们在Java代码中的“指示”动态生成的

2.简介

Sping的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;

        }
    }
}

相关文章

  • 七、动态代理

    七、动态代理

  • 面试系列~动态代理实现与原理

    动态代理有JDK动态代理, CGLIB动态代理, SpringAOP动态代理 一,JDK动态代理  jdk动态代理...

  • 七.动态代理

    1.定义 代理设计模式:为其他对象提供一种代理以控制对这个对象的访问。动态代理:代理类在程序运行时创建的代理方式被...

  • 编程常用的设计模式

    动态代理和静态代理 静态代理 动态代理 静态代理与动态代理的区别 JDK中的动态代理和CGLIB 实现动态代理的方...

  • Spring的AOP原理分析

    一 动态代理 动态代理分为JDK动态代理和CGLIB动态代理 jdk动态代理 被代理类(目标类)和代理类必须实现同...

  • 设计模式之代理模式

    代理分为静态代理和动态代理。 动态代理又包括基于JDK的动态代理、基于CGlib 的动态代理、基于Aspectj实...

  • Java高级主题(五)——动态代理

    代理可以分为静态代理、动态代理,动态代理又可以分为 jvm的动态代理 和 cglib的动态代理。像spring框架...

  • 动态代理

    动态代理分为两类:1、基于接口的动态代理; (JDK动态代理 )2、基于类的动态代理;(cglib动态代理)3、J...

  • 动态代理的两种方式

    静态代理就不说了,基本用到的都是动态代理。 Java中动态代理有JDK动态代理和CGLIB动态代理。 JDK代理的...

  • Java动态代理

    通过以下几种方式介绍动态代理 动态代理涉及到的类 动态代理用法 Proxy类解析 动态代理类解析 动态代理涉及到的...

网友评论

      本文标题:七.动态代理

      本文链接:https://www.haomeiwen.com/subject/tnqzyxtx.html