久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    lombok-ex 編譯時注解框架,性能完爆 AOP

     印度阿三17 2020-06-05

    lombok-ex

    lombok-ex 是一款類似于 lombok 的編譯時注解框架。

    主要補充一些 lombok 沒有實現,且自己會用到的常見工具。

    編譯時注解性能無任何損失,一個注解搞定一切,無三方依賴。

    創作目的

    • 補充 lombok 缺失的注解,便于日常開發使用。

    • lombok 的源碼基本不可讀,應該是加密處理了。

    • 為其他注解相關框架提升性能提供基礎,后期考慮替換為編譯時注解。

    特性

    • @Serial 序列化

    • @Util 工具類

    • @ToString toString

    • @Sync 同步

    • @Modifiers 修飾符

    變更日志

    變更日志

    快速開始

    準備工作

    jdk1.7

    maven 3.x

    • 編譯器啟用編譯時注解功能。

    如 idea 啟用編譯時注解,勾選【enable annotation process】

    maven 引入

    <dependency>
        <groupId>com.github.houbb</groupId>
        <artifactId>lombok-ex</artifactId>
        <version>0.0.7</version>
        <scope>provided</scope>
    </dependency>
    
    • Gradle 引入方式
    compile group: 'com.github.houbb', name: 'lombok-ex', version: '0.0.7'
    

    @Serial 注解

    • User.java

    我們定義一個簡單的 pojo,使用 @Serial

    package com.github.houbb.lombok.test.model;
    
    import com.github.houbb.lombok.ex.annotation.Serial;
    
    @Serial
    public class User {
    
        private String name;
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    }
    

    編譯

    直接使用 maven 命令編譯

    $   mvn clean install
    

    編譯結果

    查看對應的 User.class 文件,內容如下:

    package com.github.houbb.lombok.test.model;
    
    import java.io.Serializable;
    
    public class User implements Serializable {
        private static final Long serialVersionUID = 1L;
        private String name;
    
        public User() {
        }
    
        public String getName() {
            return this.name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    }
    

    @Util 注解

    注解使用

    @Util
    public class StringUtil {
    
        public static boolean isEmpty(final String string) {
            return null == string || "".equals(string);
        }
    
    }
    

    效果

    public final class StringUtil {
        private StringUtil() {
        }
    
        public static boolean isEmpty(String string) {
            return null == string || "".equals(string);
        }
    }
    

    @ToString 注解

    簡介

    @ToString 注解在類上使用,可以默認生成 toString() 方法

    例子:

    import com.github.houbb.lombok.ex.annotation.ToString;
    
    @ToString
    public class ToStringTest {
    }
    

    效果

    編譯后的 class 文件信息:

    ps: 此處依賴 FastJSON,請自行引入。

    import com.alibaba.fastjson.JSON;
    
    public class ToStringTest {
        public ToStringTest() {
        }
    
        public String toString() {
            return JSON.toJSONString(this);
        }
    }
    

    @Sync 注解

    使用

    直接指定在方法上。

    @Sync
    public void syncTest() {
        System.out.println("sync");
    }
    

    效果

    public synchronized void syncTest() {
        System.out.println("sync");
    }
    

    @Modifiers 注解

    說明

    @Modifiers 可修改類、方法、字段的訪問級別。

    暫時可能沒有特別好的應用場景,取決于用戶自己的使用。

    注意:不要搞一些難以理解的東西,盡可能便于使用者理解。

    使用方式

    @Modifiers 還有一個 appendMode 屬性,默認為 true。

    如果設置為 false,可以直接將修飾符改為用戶指定的。

    import com.github.houbb.lombok.ex.annotation.Modifiers;
    import com.github.houbb.lombok.ex.constant.Flags;
    
    @Modifiers(Flags.FINAL)
    public class ModifiersTest {
    
        @Modifiers(Flags.VOLATILE)
        private int value;
    
        @Modifiers(Flags.SYNCHRONIZED)
        public static void syncTest() {
            System.out.println("sync");
        }
    
    }
    

    效果

    public final class ModifiersTest {
        private volatile int value;
    
        public ModifiersTest() {
        }
    
        public static synchronized void syncTest() {
            System.out.println("sync");
        }
    }
    

    開源地址

    https://github.com/houbb/lombok-ex

    后期 Road-map

    • [ ] 對于注解的開關配置以及編譯優化

    • [ ] @AutoLog 實現完善

    • [ ] @Equals @HashCode @EqualsAndHashCode 等內置方法重載

    • [ ] @NotNull 參數校驗,可以單獨一個項目 valid

    • [ ] @Async 異步執行 async

    • [ ] bean-mapping, sensitive 等優化

    • [ ] AST 基礎框架

    思路:通過 AST 直接解析文本,然后通過 AST 結合 jdk utils 重新構建 class 文件。

    原文鏈接

    掃碼關注一波~

    來源:https://www./content-4-705751.html

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 无码免费大香伊蕉在人线国产| 在线观看国产成人AV片| 无码人妻斩一区二区三区| 精品久久久久久成人AV| 国产精品成人午夜久久| 欧美午夜成人片在线观看| 国内精品久久久久久无码不卡 | 韩国V欧美V亚洲V日本V| 亚洲综合一区国产精品| 亚洲中文字幕无码久久精品1| 一本一道VS无码中文字幕| 少妇和邻居做不戴套视频| 人人妻人人澡人人爽人人DVD| 狠狠爱五月丁香亚洲综| 最新无码国产在线视频人与| 十八禁午夜福利免费网站| 国内精品久久久久久无码不卡| 亚洲欧洲日产国码无码AV喷潮| 女人被爽到高潮视频免费国产 | 女性高爱潮视频| 午夜性色一区二区三区不卡视频| 亚洲www永久成人网站| 真实国产老熟女粗口对白| 亚洲国产欧美一区二区好看电影| 国产精品自在线拍国产电影| 十八禁午夜福利免费网站| 国产精品成人午夜久久| 熟妇人妻中文字幕| 中国少妇初尝黑人巨高清| 在线中文字幕国产一区| 久久久这里只有免费精品| 欧美嫩交一区二区三区| 亚洲精品日韩精品久久| 中文字幕无码久久一区| 国产边打电话边被躁视频| 国产999久久高清免费观看| 一本一道色欲综合网中文字幕| 欧美饥渴熟妇高潮喷水| 怡红院一区二区三区在线| 国产女精品视频网站免费蜜芽| 国产成人AV三级在线观看按摩 |