----------------------
ASP.Net+Android+IO开发S、
.Net培训、期待与您交流! ----------------------
一.前景知识
JVM生成的动态类必须实现一个或多个接口,因为只有这样,它才能被用作实现了相同接口的目标类的代理。而如果目标类没有实现任何接口呢?我们可以用第三方提供的CGLIB库来实现动态生成一个类的子类,因为一个类的子类也可以用作该类的代理。
二.JVM创建动态类及其对象需要的材料
1. 生成类中的方法,通过其实现的接口获取
2. 产生类字节码必须有的一个关联的类加载器
3. 生成类中的方法中的代码,我们把代码写在一个约定好的接口对象InvocationHandler.invoke()方法中,然后把对象传给它。
三.创建动态类可用的类及其方法
直接获得代理对象:
四. 如何写InvocationHandler.invoke(...)方法中的代码呢
1.原理:如果objProxy是ArrayList的代理,他们共同实现的接口肯定是collection。
由上图可知,abjProxy.add("add")时,相当于执行的是handler.invoke(objProxt,add(),"abc"),这样我们就知道怎么用invoke里面的参数了。
五.完整示例
---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------