动态代理分析

  • 我对动态代理的理解就是在不改变原有类的基础上进行功能的增强
  • 在Java中实现动态代理的方法有:
  • jdk自身提供的方法 proxy
  • cglib代理
  • 而今天主要在jdk的所提供的一种方式来实现的
  • 而这种方式唯一的缺点就是还需要实现一个共同的接口,如果不实现则无法实现代理的方式
  • 实现提供的一个接口InvocationHander的接口在这接口中,所实现的invok方法其中参数在这里说明一下:第一个是调用方法对象的对象一定要通过构造函数将其对象传递过来,第二个参数时方法所需要的参数在这个invok方法就可以对这个方法进行功能加强
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

public class DynamicProxy implements InvocationHandler{


private Player game;
public DynamicProxy(Player game) {
this.game =game;

}

@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("在这个方法之前执行的方法。。");
System.out.println(method.getName());
method.invoke(game,args);
System.out.println("在这个方法之后执行的。。。");
return null;
}

}
  • 调用时候的情形:我给你们展示一下,通过代理获取代理对象
1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
//解析处理器对象
Player player =new Player() ;
DynamicProxy dynamicProxy =new DynamicProxy(player);

Game instance = (Game) Proxy.newProxyInstance(Player.class.getClassLoader(), Player.class.getInterfaces(), dynamicProxy);
instance.kill();
instance.upgrade();
}
  • 代理并没有我们想象的那么难只不过就如同我们的代理服务器一样,通过代理服务器我们间接的进行连接墙外的外网,获取外部咨询,就如同我们身在国外一样。其实这个原理也是这样,优势:在不进行任何的代码入侵的情况下我们对它的方法进行增强,这岂不是很神奇。。。

你可能感兴趣的:(动态代理分析)