黑马程序员_高新技术学习笔记第九章

来源:互联网 发布:sift算法原理 编辑:程序博客网 时间:2024/05/13 18:50

---------------------- 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培训、期待与您交流! ----------------------

 详细请查看:http://edu.csdn.net/heima

原创粉丝点击