代理模式是项目中常用的一种设计模式。提供了间接访问目标对象的一种方式;即通过代理对象访问目标对象。,这样做的好处是,可以在不改变原有目标对象的基础上,对目标对象增加额外的扩展功能。,代理模式又分为静态代理、jdk动态代理、cglib动态代理三种实现方式。,三种实现方式各有优点,以及适用的场景。,被代理对象与代理对象需要实现相同的接口或者是继承相同父类,因此要定义一个接口或抽象类。,输出结果:,jdk动态代理是基于接口的一种代理方式,目标对象一定要实现接口。,原理是,利用反射机制,动态生成匿名类继承Proxy类并且实现了要代理的接口,由于java不支持多继承,所以JDK动态代理不能代理类。,输出结果:,目标对象可以不用实现接口,不能针对final类进行代理。,原理是,动态生成class继承目标对象。,使用cglib必须引入对应的jar包。,输出结果:,静态代理,代理类必须非常明确,所以无法做到通用,但是效率也是最高的。,jdk动态代理,必须基于接口代理,有一定局限性;动态生成字节码文件,可以用于通用业务(性能日志等)。,cglig动态代理,也是动态生成字节码文件,生成的代理类继承了目标对象。,spring aop默认代理策略是:如果目标对象实现了接口,则使用jdk动态代理,否则使用cglib代理。,jdk8之后,jdk动态代理效率要高于cglib代理。
© 版权声明
文章版权归作者所有,未经允许请勿转载。