zoukankan      html  css  js  c++  java
  • 动态代理是基于什么原理(总结杨晓峰的博客)

    动态代理的原理

    编程语言分为:动态类型,静态类型

    动态类型和静态类型的区别?

    一种比较简单的区别方法:是在编译期进行检查,还是在运行时期进行检查。

    通常认为:java是一种强类型语言,但是提供类似反射的机制,也具备部分动态语言的能力。


    反射机制是java语言提供的一种基础功能,赋予程序在运行时自省(introspect能力),通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性或者方法,调用方法或者构造对象,甚至可以运行时修改类定义。

    动态代理是一种方便运行时动态构建代理、动态处理代理方法调用的机制。

    实现动态代理的方式有很多:比如jdk自身提供的动态代理,性能更高的字节码操作机制,类似ASM、cglib(基于ASM),Javassist

    jdk动态代理的实例

    public class MyDynamicProxy{
        public static void main(String[] args) {
            HelloImpl hello = new HelloImpl();
            MyInvocationHandler handler = new MyInvocationHandler(hello);
            //构造代码实例
            Hello proxyHello = (Hello)Proxy.newProxyInstance(HelloImpl.class.getClassLoader(),HelloImpl.class.getInterfaces(),handler);
            //调用代理方法
            proxyHello.sayHello();
        }
    
        interface Hello{
            void sayHello();
        }
    
        class HelloImpl implements Hello{
            @Override
            public void sayHello(){
                System.out.println("Hello world");
            }
        }
    
        class MyInvocationHandler implements MyInvocationHandler{
            private Object target;
            public MyInvocationHandler(Object target){
                this.target = target;
            }
    
            @Override
            public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
                System.out.println("Invoking sayHello");
                Object result = method.invoke(target,args);
                return result;
            }
        }
    }

  • 相关阅读:
    linux JAVA JDK环境配置
    逍遥语录
    php常用函数集
    使用uGUI系统玩转标准俄罗斯方块
    Unity3D中uGUI事件系统简述及使用方法总结
    JAVA笔记-如何将百万级数据高效的导出到Excel表单
    简单的异步Socket实现——SimpleSocket_V1.1
    Netty4.x中文教程系列(六) 从头开始Bootstrap
    Unity3D中简单的C#异步Socket实现
    基于Spring框架的简单多数据源切换解决办法
  • 原文地址:https://www.cnblogs.com/zhangchiblog/p/9052153.html
Copyright © 2011-2022 走看看