zoukankan      html  css  js  c++  java
  • Lombok插件看法浅谈

    背景

    最近接触的几个工程中Lombok插件出现频率比较高,趁机了解一下原理。

    简要说明:

    受益于JSR 269 API,程序可以在编译阶段对AST进行节点的操作,从而注入相关的功能结点,从而包含在最终的字节码文件里。

    优点:

    1. 减少了coding过程中的一些Getter/Setter等代码的生成。

    缺点:

    1. 代码可读性差;
    2. 代码调试不方便;
    3. IDE需要插件支持。

    总结:

    1. 整体而言,个人认为使用lombok弊大于利,不建议使用;
    2. JSR 269是个比较有意思的东西,做一些分析类的工具应该有帮助。

    扩展思考:

    Spring AOP的部分是否可以使用JSR 269原理生成字节码,而不是运行时动态生成呢?
    我认为是可以的,Spring的AOP是基于动态代理实现的,根据实际场景和具体配置不同有JDK原生动态代理和Cglib两种不同的实现。在Spring之前就已经有AOP的成熟实现了,而且也是在编译期使用字节码织入的方式,思路与lombok一致,那就是大名鼎鼎的AspectJ了,现在Spring中还沿用着它的AOP注解和语法。
    不过AspectJ在JDK5就有了,那个时候JSR269还没出现,所以它并不是使用这种方式实现的。
    看了下AspectJ的使用,发现跟lombok一样,需要IDE支持,增强的部分要写一些代码。但是如果没有Spring的话,我很乐意使用AspectJ来实现AOP的使用,因为给代码开发维护带来的便利和灵活性非常高,总体而言,利大于弊。

    参考文档

    1. https://www.jianshu.com/p/63038c7c515a
    2. https://blog.mythsman.com/2017/12/19/1/
    3. https://github.com/rzwitserloot/lombok
    4. https://stackoverflow.com/questions/6107197/how-does-lombok-work
  • 相关阅读:
    Django之权限用法
    Django之stark组件的使用和总结
    Django之stark组件2
    Wmic
    Powershell + HTA
    IFG以太网帧间隙
    python编译报错
    C# 格式化XML方法
    C#开发中常用的加密解密方法
    面试题
  • 原文地址:https://www.cnblogs.com/liushijie/p/9931358.html
Copyright © 2011-2022 走看看