关于代理,我以前压根就没有接触过。在学视频中代理时,我在恍然大悟,原来赫赫有名的Spring框架就是靠这个技术做出来的啊,满惊讶的。学习完后也像张老师的一样做了个迷你小框架。感觉我也能做出框架来,满happy的!
对代理做了个小总结:
代理的主要作用:为其他类提供一个代理以控制对某个对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。
动态代理的原理: jvm可以在运行期间动态生成出类的字节码,这种动态生成的类往往被用作代理类,即动态代理类,用jva生成的动态类必须实现一个或多个接口,所以,jvm生成的动态类只能用作具有相同接口的目标类代理
代理的执行机制:客户端调用代理---->代理的构造方法接收一个InvocationHandler
对象--->然后客户端调用代理的各个方法--->InvocationHandler
对象的invoke方法又把方法分发给目标的相应方法并在调用方法前后添加一些其他功能,这里的”目标“即客户端要调用的程序 。
代理要用到的三个主要类:
java.lang.reflect.Proxy 提供用于创建动态代理类和实例的静态方法,它还是由这些方法创建的所有动态代理类的超类。
java.lang.reflect.InvocationHandler
是代理实例的调用处程序实现的接口。 每个代理实例都具有一个关联的调用处理程序。对代理实例调用方法时,将对方法调用进行编码并将其指派到它的调用处理程序的invoke
方法
java.lang.ClassLoader 类加载器是负责加载类的对象。ClassLoader 类是一个抽象类。如果给定类的二进制名称,那么类加载器会试图查找或生成构成类定义的数据。一般策略是将名称转换为某个文件名,然后从文件系统读取该名称的“类文件”。