lombok-ex Annotation framework при компиляции производительность полная АОП

Язык программирования

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");
    }
}

адрес с открытым исходным кодом

GitHub.com/second half/lo MBO…

Позже дорожная карта

  • Для настройки переключателя аннотаций и оптимизации компиляции

  • @AutoLogдостичь совершенства

  • @Equals @HashCode @EqualsAndHashCodeи т.д. Встроенная перегрузка методов

  • @NotNullПроверка параметров, может быть отдельным проектомvalid

  • @AsyncАсинхронное выполнениеasync

  • bean-mapping, sensitiveРавная оптимизация

  • Базовая структура AST

Идея: парсить текст напрямую через AST, а потом пересобирать файл класса через AST в сочетании с jdk utils.

Оригинальная ссылка

Отсканируйте код, чтобы следовать за волной~

公众号