编程语言
首页 > 编程语言> > Java中的动态代理及实现原理

Java中的动态代理及实现原理

作者:互联网

1.Java 中的动态代理是什么?

动态代理:对于实现了某个接口的类,增加一些额外的处理, 比如说加日志,加事务等。可以给这个类创建一个代理类,这个类不仅包含原来类方法的功能,还在原来的基础上添加了额外处理的新功能。这个代理类并不是定义好的,而是动态生成的。具有解耦意义,灵活,扩展性强。
动态代理的应用:Spring 的 AOP 、加事务、加权限、加日志。

2.怎么实现动态代理?

(1)每一个动态代理类都必须要实现 InvocationHandler 这个接口,将其编译生成代理类的二进制码,利用加载器加载,并将其实例化产生代理对象,最后返回。
(2)每个代理类的实例都关联到了一个 handler,当我们通过代理对象调用一个方法的时候,这个方法的调用就会被转发为由 InvocationHandler 这个接口的 invoke 方法来进行调用。
(3)通过 Proxy.newProxyInstance 创建的代理对象, 是Jvm运行时动态生成的一个对象,它并不是InvocationHandler类型,也不是定义的那组接口的类型,而是在运行时动态生成的一个对象。

3.InvocationHandler接口的invoke 方法

invoke是InvocationHandler这个接口的唯一一个方法:

Object invoke(Object proxy, Method method, Object[] args) throws Throwable  

4.Proxy类的newProxyInstance方法

Proxy类的作用是动态创建一个代理对象。它提供了许多的方法,用的最多的是 newProxyInstance 这个方法:

public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces,InvocationHandler handler)	throws IllegalArgumentException

标签:Java,对象,代理,接口,InvocationHandler,动态,方法
来源: https://blog.csdn.net/superen0/article/details/121172648