Java动态代理

一 什么是代理    

        给目标对象提供一个代理对象,由代理对象管理对目标对象的引用;

        例如对象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方法。

你可能感兴趣的:(Java动态代理)