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

lombok-ex

lombok-ex 是一款相似於 lombok 的編譯時註解框架。java

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

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

創做目的

  • 補充 lombok 缺失的註解,便於平常開發使用。
  • lombok 的源碼基本不可讀,應該是加密處理了。
  • 爲其餘註解相關框架提高性能提供基礎,後期考慮替換爲編譯時註解。

特性

  • @Serial 序列化
  • @Util 工具類
  • @ToString toString
  • @Sync 同步
  • @Modifiers 修飾符

變動日誌

變動日誌json

快速開始

準備工做

jdk1.7+app

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,使用 @Serialasync

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 命令編譯maven

$   mvn clean install

編譯結果

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

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 文件。

原文連接

掃碼關注一波~

公衆號

相關文章
相關標籤/搜索