美文网首页
JAVA代理与动态代理

JAVA代理与动态代理

作者: martingale | 来源:发表于2020-11-19 11:59 被阅读0次

    代理模式简介

    代理模式:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。

    举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车辆过户流程,我只是负责选择自己喜欢的车,然后付钱就可以了。用图表示如下:

    image

    代理模式分类

    静态代理

    如类图所示,创建服务类接口,实现服务接口,创建代理类

    动态代理

    java动态代理的实现包括JDK动态代理机制(代理必须有相应的接口),cglib(不需要接口,可以对类进行代理)
    在spring中区别如下:

    JDK动态代理(Dynamic Proxy)

    基于标准JDK的动态代理功能
    只针对实现了接口的业务对象

    CGLIB

    通过动态地对目标对象进行子类化来实现AOP代理
    需要指定@EnableAspectJAutoProxy(proxyTargetClass = true)来强制使用
    当业务对象没有实现任何接口的时候默认会选择CGLIB

    AspectJ
    AspectJ是Eclipse旗下的一个项目。Spring AOP借鉴了很多AspectJ成熟的接口和注解等。
    很多地方都是直接用到AspectJ里面的代码。典型的比如@Aspect,@Around,@Pointcut注解等等。而且从相关概念以及语法结构上而言,两者其实非常非常相似。比如Pointcut的表达式语法以及Advice的种类,都是一样的。

    最大的区别在于两者实现AOP的底层原理不太一样:
    Spring AOP: 基于代理(Proxying)
    AspectJ: 基于字节码操作(Bytecode Manipulation)

    参考:
    1.设计模式---代理模式
    2.AOP的两种实现-Spring AOP以及AspectJ

    相关文章

      网友评论

          本文标题:JAVA代理与动态代理

          本文链接:https://www.haomeiwen.com/subject/fjikiktx.html