动态代理详解
Posted chenmingjun
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态代理详解相关的知识,希望对你有一定的参考价值。
动态代理详解
? ?动态代理
它可以直接给某一个目标对象
生成一个代理对象
,而不需要代理类存在。
? ? 动态代理与代理模式原理是一样的,只是它没有具体的代理类
,直接通过反射
生成了一个代理对象。
? ? 动态代理生成技术:
? ? ? ? 1. 基于jdk提供一个Proxy类
,可以直接给实现某接口的实现类直接生成代理对象。
? ? ? ? 2. 基于cglib (spring框架会学习)
? ? java.lang.reflect.Proxy; ? 该类可以直接生成一个代理对象。
? ? Proxy类的方法
:
? ? ? ? public static Object newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h) 返回一个指定接口的代理类实例。
? ? ? ? ? ? 仅能代理实现至少一个接口的类(即目标对象需要至少有一个接口)。
? ? ? ? ? ? ClassLoader:类加载器。固定写法,和被代理类使用相同的类加载器即可。
? ? ? ? ? ? Class[]:代理类要实现的接口。固定写法,和被代理类使用相同的接口即可。
? ? ? ? ? ? InvocationHandler:策略(方案)设计模式
的应用。如何去具体实现代理,由我们自己决定。
? ? InvocationHandler接口中的invoke方法
:调用代理类的任何方法,此方法都会执行。
? ? ? ? Object invoke(Object proxy, Method method, Object[] args)
? ? ? ? ? ? Object proxy:代理对象本身的引用。一般用不着。
? ? ? ? ? ? Method method:当前调用的方法。
? ? ? ? ? ? Object[] args:当前方法用到的参数。
? ? 动态代理的应用
:
? ? ? ? 在动态代理技术里,由于不管用户调用代理对象的什么方法,都是调用开发人员编写的处理器的invoke方法(这相当于invoke方法拦截到了被代理对象的方法调用
)。
? ? ? ? 并且,开发人员通过invoke方法的参数,还可以在拦截的同时,知道用户调用的是什么方法,因此利用这两个特性,就可以实现一些特殊需求,
例如:拦截用户的访问请求,以检查用户是否有访问权限、动态地为目的对象添加额外的功能。
? ? 静态/动态代理图解:
以上是关于动态代理详解的主要内容,如果未能解决你的问题,请参考以下文章