代理即通过代理类,找到适合你的实现类。相当于现实生活中的中介的角色,你想租房子,这个时候你又不想自己找房子,那你可以找中介,通过中介找到合适自己的房子,同时你也可以让中介帮你签合同等其他事宜。代理存在静态代理和动态代理两种
静态代理
1 | public interface Sourceable { |
1 | public class Source implements Sourceable { |
1 | public class Proxy implements Sourceable { |
测试类
1 | public class ProxyTest { |
动态代理
JDK动态代理、AOP动态代理
Proxy提供了用于创建动态代理类和代理对象的静态方法,它也是所有动态代理类的父类
创建动态代理类
static Class<?>getProxyClass(ClassLoader loader,Class<?>…interfaces):创建一个动态代理类锁对应的Class对象,该代理类将实现interface所指定的多个接口,第一个ClassLoader 参数指生成动态代理类的类加载器。
创建动态代理对象
static Object newProxyInstance(ClassLoader loader,Class<?>…interfaces,InvocationHadnler h):直接创建一个动态代理对象,该代理对象的实现类实现了interfaces指定的系列接口,执行代理对象的每个方法时都会被替换执行InvocationHadnler对象的invoke方法
1 | public interface Colorable { |
1 | public class RedColor implements Colorable{ |
1 | import java.lang.reflect.InvocationHandler; |
结果
1 | ===========starting invoke function:value========== |
proxy:代表动态代理对象
method:代表正在执行的方法
args:代表调用目标方法时传入的实参
AOP动态代理
1 | public interface Colorable { |
1 | public class RedColor implements Colorable{ |
1 | public class ToolUtility { |
1 | import java.lang.reflect.InvocationHandler; |
结果
1 | 运行工具方法 |