一 什么是代理
给目标对象提供一个代理对象,由代理对象管理对目标对象的引用;
例如对象A 提供某功能,现在C要使用A 但C并不直接引用A C引用B B管理对A的引用,这里A被B代理了。
代理的目的是 降低目标对象对系统带来的复杂性,通过代理对象对原有的业务进行增强。
1.1静态代理:
被代理的类在编译运行前已经确定其类型,随着被代理对象新增,业务逐渐复杂,可维护性降低,适合一般业务场景,代理较少的时候,违反设计原则中的开闭原则
1.2 动态代理
被代理类在运行时才能确定其类型,方法执行通过反射方式动态获取执行;
二 动态代理原理
类的完整生命周期:
.java 文件---(编译)-------》 .class文件-----(类加载)-----》Class对象-----(实例化)----》实例对象----------》卸载-----------》 .java 文件
.class文件 本质是01二进制串,可以存放在硬盘和内存中。
追踪源码可得,最终动态生成的代理类 ¥Proxy+num实现了Proxy 以及方法所在的接口,方法实现最终调用
InvocationHandler的 invoke方法。