使用jdk的反射机制,创建对象的能力,创建的是代理类的的对象.而不用我们创建类文件,不用写java文件, 什么叫动态?在程序执行时,调用jdk提供的方法才能创建代理类的对象
2)知道动态代理能做什么?
2.1 静态代理和动态代理模式的对比在静态代理中目标很多的时候,可以使用动态代理,避免静态代理的缺点
在静态代理中目标类很多时候,可以使用动态代理,避免静态代理的缺点。
动态代理中目标类即使很多,
代理类数量可以很少,
当你修改了接口中的方法时,不会影响代理类。
动态代理:在程序执行过程中,使用jdk的反射机制,创建代理类对象,并动态的指定要代理目标类。
换句话说:动态代理是一种创建java象的能力,让你不用创建 TaoBao类就能创建代理类对象,除去了中间商
在java中,要想创建对象
创建类文件,java 文件编译为class
使用构造方法,创建类的对象
2.1 动态代理的介绍动态代理是指代理类对象在程序运行时由JVM根据反射机制动态生成的。动态代理不需要定义代理类的,java源文件。
动态代理其实就是jdk运行期间,动态创建class字节码并加载到JVM。
动态代理的实现方式常用的有两种:使用JDK代理,与通过CGLlB动态代理。
动态代理的实现:
jdk动态代理(理解):使用java反射包中的类和接口实现动态代理的功能,反射包java.lang.reflect,里面有三个类:InvocationHandler,Method,Proxy
cglib动态代理(了解): cglib是第三方的工具库,创建代理对象
cglib的原理是继承,cglib通过继承目标类,创建它的子类,在子类中
重写父类中同名的方法,实现功能的修改。
因为cglib是继承,重写方法,所以要求目标类不能是fina1的,方法也不能是final的。cglib的要求目标类比较宽松,只要能继承就可以了。cglib在很多的框架中使用,
比如mybatis,spring框架中都有使用。
Method类的结构图
Class Method
java.lang.Object
java.lang.reflect.AccessibleObject
java.lang.reflect.Executable
java.lang.reflect.Method
2.2.1 class.getMethod Method method = HelloService.class.getMethod("sayhello", String.class,Integer.class);提出问题?
public Method getMethod(String name, Class<?>... parameterTypes)加入,该方法的参数有多个该怎么办?
parameterTypes参数是一个类对象数组,按声明的顺序标识方法的形式参数类型。