• 动态代理是基于什么原理(总结杨晓峰的博客)


    动态代理的原理

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

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

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

    通常认为: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;
            }
        }
    }

  • 相关阅读:
    《RESTful Web Services》第一章 使用统一接口
    selenium测试(Java)--元素操作(五)
    selenium测试(Java)--浏览器控制(四)
    Struts2 基础典型应用
    Fitnesse 访问日志配置
    selenium定位方法(java实例)(二)
    selenium测试环境搭建(一)
    java web 学习-网络资源
    eclipse + tomcat 开发环境配置
    HTTP客户端代码片段
  • 原文地址:https://www.cnblogs.com/zhangchiblog/p/9052153.html
Copyright © 2020-2023  润新知