lombok-ex
lombok-exпредставляет собой среду аннотаций времени компиляции, похожую на lombok.
В основном добавьте некоторые общие инструменты, которые ломбок не реализовал и будет использовать сам по себе.
аннотации времени компиляцииБез потери производительности, одна аннотация делает все, никаких сторонних зависимостей.
творческая цель
-
Дополнить отсутствующие аннотации ломбока, чтобы облегчить ежедневную разработку и использование.
-
Исходный код ломбока в принципе нечитабелен, он должен быть зашифрован.
-
Обеспечьте основу для повышения производительности других платформ, связанных с аннотациями, и рассмотрите возможность замены их аннотациями времени компиляции позже.
характеристика
-
@Serial
Сериализация -
@Util
Инструменты -
@ToString
toString -
@Sync
Синхронизировать -
@Modifiers
модификатор
Список изменений
быстрый старт
Готов к работе
jdk1.7+
maven 3.x+
- Компилятор включает аннотации во время компиляции.
Если идея включает аннотацию во время компиляции, установите флажок [включить процесс аннотации]
импорт 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'
@Серийная аннотация
- 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 {
}
Эффект
Информация о скомпилированном файле класса:
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");
}
}
адрес с открытым исходным кодом
Позже дорожная карта
-
Для настройки переключателя аннотаций и оптимизации компиляции
-
@AutoLog
достичь совершенства -
@Equals
@HashCode
@EqualsAndHashCode
и т.д. Встроенная перегрузка методов -
@NotNull
Проверка параметров, может быть отдельным проектомvalid -
@Async
Асинхронное выполнениеasync -
bean-mapping, sensitiveРавная оптимизация
-
Базовая структура AST
Идея: парсить текст напрямую через AST, а потом пересобирать файл класса через AST в сочетании с jdk utils.
Оригинальная ссылка
Отсканируйте код, чтобы следовать за волной~