README

代理模式:
总:
通过代理对象来调用被代理对象的方法等

  1. e.g.有个老师请假了,他请了一个代理教师帮他上课
  2. 1)静态代理<br /> 1)静态代理在使用时,需要定义接口或者父类,被代理对象(即目标对象)与代理对象一<br /> 起实现相同的接口或者是继承相同父类。【代理对象和被代理对象实现/继承同一个父类】<br /> 2coding:<br /> 1】定义接口,编写方法<br /> 2】定义被代理对象,实现接口<br /> 3】定义代理对象,实现接口,聚合被代理对象{利用多态,增加可扩展性}<br /> 3)总:实现同一个接口,使用多态增加程序扩展性<br /> 4)静态代理优缺点<br /> 1)优点:在不修改目标对象的功能前提下, 能通过代理对象对目标对象进行功能扩展<br /> 2)缺点:因为代理对象需要与目标对象实现一样的接口,所以会有很多代理类;<br /> 一旦接口增加方法,目标对象与代理对象都要维护【维护成本高】
  3. 2)动态代理<br /> 1)概述<br /> 1)代理对象不需要实现接口,但是目标对象仍然要实现接口,否则不能用动态代理【被代理对象需要实现接口】<br /> 2)代理对象的生成是利用 JDK API(会用到JDK的反射机制),动态地在内存<br /> 中构建代理对象(返回代理对象后,再通过代理对象去调用目标对象的方法)<br /> 3)动态代理也叫做:JDK 代理、接口代理<br /> 2coding:<br /> 1】接口<br /> 2】被代理类实现接口<br /> 3】代理对象,Proxy.newProxyInstance JDKapi<br /> /* public static Object newProxyInstance(ClassLoader loader,<br /> Class<?>[] interfaces,<br /> InvocationHandler h)<br /> * 1.ClassLoader loader:指定当前目标对象的使用的类加载器,获取加载器的方法是固定的<br /> * 2.Class<?>[] interfaces:目标对象实现的接口类型,使用泛型的方式确认类型<br /> * 3.InvocationHandler h:事件处理,执行目标对象的方法时,会触发事件处理器的方法,会把当前执行的目标对象的方法作为参数传入<br /> */
  4. 3Cglib动态代理<br /> 1)概述<br /> 1)静态代理和JDK 代理模式都要求目标对象是实现一个接口,但是有时候目标对象只是一个单独的对象,<br /> 并没有实现任何的接口,这个时候可使用目标对象子类来实现代理-这就是 Cglib 代理【通过子类代理】<br /> 2Cglib 代理也叫作子类代理,它是在内存中构建一个子类对象从而实现对目标对象功能扩展, 有些书<br /> 也将Cglib代理归属到动态代理。<br /> 3Cglib 是一个强大的高性能的代码生成包,它可以在运行期扩展 java 类与实现 java 接口.它广泛<br /> 的被许多 AOP 的框架使用,例如 Spring AOP实现方法拦截就用到了Cglib包<br /> 4)在 AOP 编程中如何选择代理模式:【jdk代理和Cglib代理的选择】<br /> 目标对象需要实现接口,用 JDK 代理<br /> 目标对象不需要实现接口,用 Cglib 代理<br /> 5Cglib 包的底层是通过使用字节码处理框架 ASM 来转换字节码并生成新的类

静态

ITeacherDao.javaTeacherDao.javaTeacherProxy.java

JDK动态代理

Client.javaITeacher.javaTeacherDao.javaTeacherProxy.java

cglib动态代理

CLIENT.javaTeacherDao.javaTeacherProxy.java

cglib二

CglibProxy.javaCglibTest.javaLeiTikTok.java