首先让我们来了解一下如何使用 Java 动态代理。具体有如下四步骤:
- 通过实现 InvocationHandler 接口创建自己的调用处理器;
- 通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理类;
- 通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;
- 通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入。
JVM可以在运行期动态生成出类的字节码,这种动态生成的类旺旺被用作代理类,即动态代理。
JVM生成的动态类必须实现一个或多个接口,所以,JVM生成的动态类只能用作具有相同接口的目标类的代理。
代理类的各个方法中通常除了要调用目标的相应方法和对外返回目标返回结果外,还可以在代理方法中的如下四个位置加上系统功能代码:
1、在调用目标方法之前
2、在调用目标方法之后
3、在调用目标方法前后
4、在处理目标方法一场的Catch快中
实现动态代理的一个例子:
- //MyAdvice类的代码如下:
- public class MyAdvice implements Advice {
- long beginTime ;
- @Override
- public void beforeMethod(Method method) {
- System.out.println("我来黑马了!!!");
- beginTime = System.currentTimeMillis();
- }
- @Override
- public void afterMethod(Method method) {
- System.out.println("我来音悦台工作了!!!");
- long endTime = System.currentTimeMillis();
- System.out.println(method.getName()+"runtime of"+(endTime-beginTime));
- }
- }