lombok-ex 是一款相似於 lombok 的編譯時註解框架。java
主要補充一些 lombok 沒有實現,且本身會用到的常見工具。git
編譯時註解性能無任何損失,一個註解搞定一切,無三方依賴。github
@Serial
序列化@Util
工具類@ToString
toString@Sync
同步@Modifiers
修飾符變動日誌json
jdk1.7+app
maven 3.x+框架
如 idea 啓用編譯時註解,勾選【enable annotation process】異步
<dependency> <groupId>com.github.houbb</groupId> <artifactId>lombok-ex</artifactId> <version>0.0.7</version> <scope>provided</scope> </dependency>
compile group: 'com.github.houbb', name: 'lombok-ex', version: '0.0.7'
咱們定義一個簡單的 pojo,使用 @Serial
async
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 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() 方法
例子:
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 public void syncTest() { System.out.println("sync"); }
public synchronized void syncTest() { System.out.println("sync"); }
@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
@AutoLog
實現完善@Equals
@HashCode
@EqualsAndHashCode
等內置方法重載@NotNull
參數校驗,能夠單獨一個項目 valid @Async
異步執行 async 思路:經過 AST 直接解析文本,而後經過 AST 結合 jdk utils 從新構建 class 文件。
掃碼關注一波~