动态代理是基于什么原理(总结杨晓峰的博客)
动态代理的原理
编程语言分为:动态类型,静态类型
动态类型和静态类型的区别?
一种比较简单的区别方法:是在编译期进行检查,还是在运行时期进行检查。
通常认为: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{@Overridepublic void sayHello(){System.out.println("Hello world");}}class MyInvocationHandler implements MyInvocationHandler{private Object target;public MyInvocationHandler(Object target){this.target = target;}@Overridepublic Object invoke(Object proxy,Method method,Object[] args) throws Throwable{System.out.println("Invoking sayHello");Object result = method.invoke(target,args);return result;}} }
转载于:https://www.cnblogs.com/zhangchiblog/p/9052153.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
