---------------------- android培训、java培训、期待与您交流! ----------------------
动态代理技术
目标类,代理类,接口,Client调用程序
doSomeThing()
{前置
目标对象.doSomeThing()
后置
}
AOP面向方面编程
模块的交叉业务
安全,事务,日志等功能要贯穿到多个模块中,所以它们居寺交叉业务
JVM可以运行期间生成出类的字节码
生成的类往往被用作代理类
生成动态类必须实现一个或多个接口
目标类没有实现接口 CGLIB 生成一个类的子类
代理方法中如下,第四个位置是处理目标方法异常的catch块中
生成动态类
java.lang.reflect.Proxy
下 Class getProxyClass(ClassLoader loader//妈妈,Class<?>...interface//字节码实现了哪些接口)
Class clazzProxy1 = Proxy.getProxxyClass(Collection.class.getClassLoader()//通常是后面字节码的加载器,Collection.class);
StringBuilder sBuilder = new StringBuilder(name);
单线程
多线程使用StringBuffer//考虑线程安全
Class clazzParams = constructor.getParameterTypes();
//数组
sBuilder.deleteCharAt(length-1);
!=null&&!=0
newProxyInstance
public static Object newProxyInstance(ClassLoader loader, //类加载器
Class<?>[] interfaces, //实现的接口列表
InvocationHandler h) //InvocationHandler实例对象
throws IllegalArgumentException
返回一个指定接口的代理类实例,该接口可以将方法调用指派到指定的调用处理程序。
InvocationHandler
生成动态代理类
加载器 接口
创建动态类的实例对象
Invocation.class 作为构造方法的参数
constructor.newInstance()
关于动态代理目前很多东西还不能理解
可以参考
http://blog.csdn.net/dyh8818/article/details/314668
----------------------android培训、java培训、期待与您交流! ----------------------