jdk动态代理

一、动态代理代码
package com.proxy.jdk_proxy.dynamic;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.nio.channels.ServerSocketChannel;

/**

  • @author wf

  • @description 动态代理

  • @date 2019-03-09

  • 动态代理的角色分析

  • 抽象角色 一般使用接口或者抽象类来实现

  • 真实角色 被代理角色

  • 代理角色 代理真实角色 代理真实角色后一般会做一些附属操作

  • 客户 使用代理角色进行一些操作

  • 动态代理的代理类是动态生成的

  • 分两类

  • 基于接口的和类的动态代理

  • 基于接口的是jdk

  • Proxy类和InvocationHandler接口

  • 一个动态代理 一般代理某一类业务 一个动态代理可以代理多个类

  • 基于类的是cglib
    */
    public class Dynamic implements InvocationHandler {

    Object obj;

    public Dynamic(Object obj) {
    this.obj = obj;
    }

    /**

    • 生成代理类
      */
      public Object getProxy(){
      for(Class cls :obj.getClass().getInterfaces()){
      System.out.println(cls.getName());
      }
      return Proxy.newProxyInstance(this.getClass().getClassLoader(),obj.getClass().getInterfaces(),this);
      }

    /**
    *

    • @param proxy 代理类

    • @param method 代理类的处理程序方法

    • @param args

    • @return

    • @throws Throwable
      */
      @Override
      public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
      log(method.getName());
      System.out.println(obj.getClass().getName());
      System.out.println( proxy.getClass().getMethod(“delete”,null).getName());
      System.out.println("======================================");
      Object result = method.invoke(obj,args);

      return result;
      }

    public void log(String method){
    System.out.println(method);
    }

}

二、静态代理附图一张
jdk动态代理_第1张图片

三、cglib动态代理附上代码

public class CglibTest implements MethodInterceptor {

@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
    return null;
}

}

你可能感兴趣的:(spring基础,jdk动态代理)