• 请不要在回答技术问题时复制粘贴 AI 生成的内容
beryl
V2EX  ›  程序员

Java 拦截器和 AOP 差异及性能

  •  1
     
  •   beryl · Dec 27, 2019 · 6165 views
    This topic created in 2352 days ago, the information mentioned may be changed or developed.

    springboot 项目通过注解方式实现接口权限校验。 用 aop 和拦截器都可以快速实现,但是这里有个疑惑是:

    拦截器是不是全局性质的,所以接口都要过一遍,只是没有检查到注解的我不需要处理而已? 这样会不会导致一丢丢性能的损失相比于 AOP 把切面范围限制的更小。

    11 replies    2019-12-28 13:15:39 +08:00
    bobuick
        1
    bobuick  
       Dec 27, 2019
    虽然可能有些场景用到有重合,因为他们都能支持。
    不过拦截器这个是人家 spring 框架的处理流的一环,AOP 跟 Spring 关系不算特别大,虽然你用了 Spring 的 AOP 注解来实现,可是你不用它也是能实现切面编程的。
    bobuick
        2
    bobuick  
       Dec 27, 2019
    好像没回答问题,这个看占比,比如要处理的接口几乎 90%,那没区别。如果你的逻辑只处理少量几个接口, 那用你自己定义好范围的 AOP 理论上损失小一些
    qiyuey
        3
    qiyuey  
       Dec 27, 2019
    取决于你定义的作用范围
    ai277014717
        4
    ai277014717  
       Dec 27, 2019
    正常来讲你说的 AOP 会涉及到 runtime 所以性能会差一点。拦截器只是对注册的实例有效,理论上编译器更好优化性能更高。
    lavvrence
        5
    lavvrence  
       Dec 27, 2019
    拦截器你也可以指定拦截的接口。。
    manami
        6
    manami  
       Dec 27, 2019
    对比 AOP 拦截器的功能很有限,但能满足一般需求。赞同楼上的“AOP 会涉及到 runtime 所以性能会差一点”,如果要用 AOP,AspectJ 的性能比 Spring AOP 更好更快,但复杂一点。
    chendy
        7
    chendy  
       Dec 27, 2019
    印象里的拦截器不是根据 url 判断是否拦截么,楼主说的根据注解判断的拦截器是什么拦截器?
    lucifer1108
        8
    lucifer1108  
       Dec 27, 2019
    当面试题尝试说一下.
    拦截器应该是 web 服务器的行为,注册到 web.xml 的拦截器会根据 URL 匹配过一遍.相当于多一层调用栈.当然,spring 应该是注册了一个统一的 `/*` 的拦截器,我们注入的只是这个拦截器的扩展.
    aop 是 spring 的行为,是在编译时为符合规则的类动态代理生成新的类.会涉及到动态生成字节码的一些操作.如果有性能的影响也只体现在编译和加载上.
    运行时的则完全看你的业务逻辑了.
    lihongjie0209
        9
    lihongjie0209  
       Dec 27, 2019
    你如果要在所有的 xxxDao 上做动态拦截, 你只能用 AOP

    但是你如果想在 xxxController 上做动态拦截, 你可以用拦截器或者是 AOP

    如果有的选, 我选拦截器, 代码简单, 逻辑简单, 调试简单
    zhiguang
        10
    zhiguang  
       Dec 27, 2019
    AOP 不也是代理吗,第一次可能有点影响,后面?
    EXChen
        11
    EXChen  
       Dec 28, 2019
    对于 Web 应用,过滤器与拦截器最大的区别在于涉及到转发时拦截器会多次执行,而过滤器只会执行一遍,如果你的请求不涉及到这些其实两者差异不大,使用的技术不同,但都能满足你的需求。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2831 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 61ms · UTC 14:29 · PVG 22:29 · LAX 07:29 · JFK 10:29
    ♥ Do have faith in what you're doing.