天天看點

java注解 性能_lombok-ex 編譯時注解架構,性能完爆 AOP

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 檔案。

原文連結

掃碼關注一波~