lombok-ex
lombok-ex 是一款類似于 lombok 的編譯時注解架構。
主要補充一些 lombok 沒有實作,且自己會用到的常見工具。
編譯時注解性能無任何損失,一個注解搞定一切,無三方依賴。
創作目的
補充 lombok 缺失的注解,便于日常開發使用。
lombok 的源碼基本不可讀,應該是加密處理了。
為其他注解相關架構提升性能提供基礎,後期考慮替換為編譯時注解。
特性
@Serial 序列化
@Util 工具類
@ToString toString
@Sync 同步
@Modifiers 修飾符
變更日志
快速開始
準備工作
jdk1.7+
maven 3.x+
編譯器啟用編譯時注解功能。
如 idea 啟用編譯時注解,勾選【enable annotation process】
maven 引入
com.github.houbb
lombok-ex
0.0.7
provided
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");
}
}
開源位址
後期 Road-map
[ ] 對于注解的開關配置以及編譯優化
[ ] @AutoLog 實作完善
[ ] @Equals @HashCode @EqualsAndHashCode 等内置方法重載
[ ] @NotNull 參數校驗,可以單獨一個項目 valid
[ ] @Async 異步執行 async
[ ] AST 基礎架構
思路:通過 AST 直接解析文本,然後通過 AST 結合 jdk utils 重新建構 class 檔案。
原文連結
掃碼關注一波~