1.代理的介绍
说的java的代理,就离不开java的代理模式。而java的代理模式就是通过引入一个代理对象来代替我们的实际对象进行操作,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。所以代理就是实现对功能的扩展。
2.代理的分类
代理按照大的分类可以分为静态代理和动态代理两种,而动态代理又可以分为jdk动态代理和cglib代理两种。
- 静态代理
静态代理在编译时就将接口、实现类、代理类这些都变成了一个个实际的 class 文件,对目标方法的增强都是手动提前写好的,如果增强的方法较多的话,这时我们使用静态代理写的就比较多了,因此静态代理会比较容易理解,但是其灵活性不够。 - 动态代理
动态代理时在类运行的时候进行生成字节码文件的,拥有较高的灵活度,不用针对每个目标类都创建一个代理类。- jdk动态代理:只能代理实现了接口的类 (使用java反射包中的类和接口实现动态代理功能,java.lang.reflect里面有三个类 InvocationHandler , Method , Proxy)
- cglib动态代理:这种是以生成目标类的子类来实现的,所以它的目标类不用必须实现接口 (第三方工具库,cglib通过继承目标类,创建它的子类,在子类中复写父类同名方法,实现功能的修改,所以目标类不能用final修饰)
InvocationHandler 接口,就一个方法invoke(),表示代理对象要执行的功能方法,你的代理类要完成功能就写在invoke()方法中。
代理类完成的功能:1.调用目标方法,执行目标方法的功能. 2.功能增强,在目标方法调用是,增加功能.
方法: public Object invoke(Object proxy, Method method, Object[] args)
Object proxy:JDK创建的代理对象,无需赋值
Method method:目标类中的方法,jdk提供的Method类
Object[] args:目标类中的参数,jdk提供的
InvocationHandler 表示你的代理要干什么;1.创建类实现InvocationHandler接口。 2.重写invoke()方法,代理类要完成的方法写在这里.
Method类,方法类,确切的说是目标类的方法。可以通过Method类执行目标类的方法,Method.invoke(目标对象,方法参数).
Proxy类,创建代理对象,之前创建对象都是new 类的构造方法。现在使用Proxy的静态方法创建对象,newProxyInstance()
静态方法:Proxy.newProxyInstance(classLoader, interfaces, myInvocationHandler); 返回值就是代理对象
ClassLoader classLoader:类加载器,负责向内存中加载对象的,使用反射获取对象ClassLoader,a.getClass.getClassLoader().
Class<?>[] interfaces:接口,目标对象实现的接口,也是反射获取的.
InvocationHandler myInvocationHandler:自己写的代理类完成的功能.
转: https://www.cnblogs.com/mcj123/p/16860633.html
标签:Srping,java,对象,代理,目标,AOP,方法,Method From: https://www.cnblogs.com/fps2tao/p/17340388.html