代理

作者: 白纸糊 | 来源:发表于2019-03-27 16:12 被阅读0次
package cn.alittle.Main.Refelct;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

import org.omg.CORBA.SystemException;
import org.omg.CORBA.portable.InputStream;
import org.omg.CORBA.portable.InvokeHandler;
import org.omg.CORBA.portable.OutputStream;
import org.omg.CORBA.portable.ResponseHandler;

public class MyProxy implements InvocationHandler {

    private Object target;

    public MyProxy(Object target) {
        super();
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method methond, Object[] args) throws Throwable {
        System.out.println("校验");
        Object invoke = methond.invoke(target, args);
        System.out.println("记录");
        return invoke;
    }
   
}

package cn.alittle.Main.Refelct;

import java.lang.reflect.Proxy;

public class MyProxyFactory<T> {
        
        // 为指定target生成动态代理对象
    public  T getProxy(Object target) throws Exception {
        // 创建一个MyInvokationHandler对象
        MyProxy handler = new MyProxy(target);
        // 为MyInvokationHandler设置target对象
//      handler.setTarget(target);
        // 创建、并返回一个动态代理对象
        return (T) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), handler);
    }

}


package cn.alittle.Main.Refelct;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileReader;
import java.lang.reflect.Proxy;
import java.util.ArrayList;

import org.junit.Test;

public class proxy {
@Test
    public  void main() throws Exception {
    Student student = new Student();
        MyProxy myProxy = new MyProxy(student);
        //类的加载器 类的接口 类的代理
        School proxy = (School)Proxy.newProxyInstance(student.getClass().getClassLoader(), new Class[] {School.class},
                myProxy);
        proxy.eat();
        
        MyProxyFactory<School> myProxyFactory = new MyProxyFactory<School>();
         School proxy2 = myProxyFactory.getProxy(student);
         proxy2.eat();
//  try (BufferedReader bufferedReader = new BufferedReader(new FileReader(""))  ){
//      
//  }
  }
}

相关文章

  • 正向代理和反向代理(通俗易懂)

    正向代理:代理端代理的是客户端。反向代理:代理端代理的是服务端。 常用案例 正向代理:如VPN代理客户端 反向代理...

  • 编程常用的设计模式

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

  • JAVA动态代理的实现方式

    1. 静态代理VS动态代理 代理类可以增强被代理对象的方法。可分为静态代理和动态代理。 1.1 静态代理 静态代理...

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

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

  • Nginx作为代理服务

    一、代理服务代理-代为办理(代理理财、代理收货等等) 1.1正向代理 1.2反向代理 1.3代理区别 1.4配置语...

  • Spring之代理模式

    九、代理模式 目录:静态代理、动态代理AOP的底层机制就是动态代理。代理模式分为静态代理和动态代理。接触aop之前...

  • Spring的AOP原理分析

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

  • 静态代理、动态代理

    代理分为静态代理和动态代理 按照代理创建的时期,可以分为静态代理和动态代理: (1) 静态代理:由程序员或者...

  • Java 代理的实现原理

    一、怎样使用代理 二、代理实现的原理 一、代理分为静态代理和动态代理 静态代理:代理对象获得目标对象的引用 动态代...

  • spring aop

    JDK动态代理和CGLib代理 JDK的代理代理类 被代理接口 被代理实现类 启动类: jdk的动态代理是针对接口...

网友评论

      本文标题:代理

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