zoukankan      html  css  js  c++  java
  • jdk的动态代理

    package com.jy.util;
    
    
    import sun.misc.ProxyGenerator;
    
    import java.io.FileOutputStream;
    import java.lang.reflect.InvocationHandler;
    import java.lang.reflect.Method;
    import java.lang.reflect.Proxy;
    
    public class Test {
    
        public static void main(String[] args) throws Exception {
            
            
            /*
            jdk的动态代理为什么只能是接口分析如下:
            将动态代理生成的字节码写入文件,其代理类是继承了原有的Proxy类,并实现implements了需要被代理的接口
            因为在java中是单继承,所以jdk的动态代理只能是接口
            */
            
            //UserService CompanyService 为需要生成代理的接口
            Class<?>[] clazz = {UserService.class, CompanyService.class};
            byte[] bytes = ProxyGenerator.generateProxyClass("$Proxy", clazz);
            FileOutputStream fos = new FileOutputStream("$Proxy.class");
            fos.write(bytes);
            fos.flush();
            fos.close();
            
            new Test().proxyTest();
    
        }
    
        private void proxyTest() {
            Class<?>[] interfaces = {IProxyTest.class};
            IProxyTest iProxyTest = (IProxyTest)Proxy.newProxyInstance(this.getClass().getClassLoader(), interfaces,new MyInvocationHandler(new IProxyTestImpl()));
            iProxyTest.run();
        }
        /**
            jdk的动态代理
        */
        class MyInvocationHandler implements InvocationHandler{
            private Object target;
            MyInvocationHandler(Object target){
                this.target = target;
            }
    
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //动态代理前置处理
                System.out.println("前置处理");
                Object obj = method.invoke(target, args);
                //动态代理后置处理
                return obj;
            }
        }
    }
    人生没有彩排,每天都是现场直播!
  • 相关阅读:
    POJ 1873 The Fortified Forest
    C语言中time函数获取系统时间
    回车符号与换行符号
    [转]NYOJ-511-移动小球
    C语言的inline
    C语言编译全过程
    linux下面安装配置mongoDB
    linux下面安装配置LAMP环境
    linux下面的解压缩文件的命令
    day23 正则,re模块
  • 原文地址:https://www.cnblogs.com/northern-light/p/10497639.html
Copyright © 2011-2022 走看看