Lombok использует подробное объяснение, упрощает программирование на Java

Java
Lombok использует подробное объяснение, упрощает программирование на Java

предисловие

В Java-приложении много повторяющегося и похожего кода, который почти не меняется после генерации, но нам также пришлось потратить много усилий на их написание, чтобы соответствовать требованиям компиляции Java.

Например, при разработке Java-приложений нам практически приходится добавлять методы get(), set() и другие ко всем переменным-членам Bean.Эти относительно фиксированные коды, которые приходится писать, тратят много энергии программистов, и в то же время время позволить содержанию класса видеть С большим количеством беспорядка, мы хотим сосредоточить нашу ограниченную энергию на более важных вещах.

Lombok существует уже давно, и даже опция Lombok была добавлена ​​в Spring Boot Initalizr,

Здесь мы подробно объясним Ломбок:

Lombok

Знакомство с официальным сайтом: Project Lombok — это библиотека Java, которая автоматически подключается к вашему редактору и инструментам сборки, оживляя ваш Java. Никогда больше не пишите еще один метод get или equals. Ранний доступ к будущим функциям Java, таким как val и многим другим.

Грубо говоря:Lombok — это утилита Java™, помогающая разработчикам избавиться от многословия Java, особенно для простых объектов Java (POJO). Это делается с помощью аннотаций, см.:

Сравнение бобов

Традиционный класс POJO выглядит так

Класс POJO, преобразованный Lombok, выглядит следующим образом:

С первого взгляда мы можем заметить, что когда мы пишем класс Employee, мы передаем@DataВ аннотации реализованы все переменные-членыget()иset()методы и т. д., в то время как класс Employee выглядит чище и лаконичнее. Магия Ломбока на этом не останавливается: богатые аннотации удовлетворяют большинство наших потребностей в разработке.

Установка Ломбока

Глядя на рисунок ниже, реализация @Data, мы обнаруживаем, что эта аннотация применяется на этапе компиляции.

Это сильно отличается от большинства используемых нами аннотаций, таких как аннотации Spring (которые реализуют бизнес-логику посредством отражения во время выполнения), таких как аннотации Spring @RestController.

Более прямым проявлением является то, что общая среда IDE может автоматически распознавать синтаксис после ссылки на общий пакет, но эти аннотации Lombok автоматически не распознаются общей средой IDE, поэтому, если вы хотите использовать Lombok, вам необходимо установить соответствующий Подключаемые модули. Он поддерживает компиляцию IDE и предотвращает автоматическую проверку IDE, чтобы не сообщать об ошибках. Ниже в качестве примера используется IntelliJ IDEA для установки подключаемого модуля.

Найдите Lombok в репозиториях, перезапустите IDE после установки.

Добавьте зависимости к проектам Maven или Gradle.

На этом этапе мы можем использовать аннотации, предоставленные Ломбоком, чтобы что-то сделать.

Подробное объяснение аннотаций Ломбока

Официальный сайт Ломбока предоставляет множество аннотаций, но «Хотя крепкое вино — это хорошо, не жадничай». , и они не перечислены здесь как @Synchronized и т. д.)

@Геттер и @Сеттер

Эту аннотацию можно применить к переменным класса или члена, как мы и ожидали.@Getterи@SetterЭто автоматическое создание методов получения и установки для переменных-членов.Права доступа по умолчанию являются общедоступными методами.Конечно, мы также можем указать защищенные права доступа и т. д., как показано ниже:

Имя переменной-члена определяет генерацию метода set, а права доступа защищены; переменная-член female логического типа генерирует только метод get, а имя метода изменяется на isFemale(). Когда эта аннотация применяется к классу, методы get и set создаются для всех нестатических переменных-членов по умолчанию.Вы также можете вручную отключить создание методов get или set с помощью AccessLevel.NONE, как показано ниже:

@ToString

Аннотацию необходимо применить к классу, чтобы сгенерировать для нас метод toString объекта Object, и несколько свойств в аннотации могут обогатить содержимое, которое мы хотим,excludeАтрибут запрещает использование поля в методе toString, а атрибут of может указывать используемое поле, как показано ниже:

Просмотрите скомпилированный класс Employee.class, чтобы получить ожидаемый результат, как показано ниже.

@EqualsAndHashCode

Эту аннотацию необходимо применить к классу. Используя эту аннотацию, ломбок будет генерировать для нас методы equals(Object other) и hashcode(), включая все нестатические свойства и непереходные свойства. Аналогичным образом, эта аннотация также может исключать некоторые свойства через поля exclude property., атрибут of задает некоторые поля, а поля родительского класса также можно использовать в переопределенном методе через атрибут callSuper, чтобы мы могли более гибко определять сравнение бинов, как показано на следующий рисунок:

Просмотрите скомпилированный файл Employee.class, как показано ниже:

@NonNull

Эту аннотацию необходимо применить к параметрам или свойствам метода или конструктора, чтобы судить о достоверности параметров.По умолчанию создается исключение NullPointerException.

Глядя на файл NonNullExample.class, для нас будет выдано исключение нулевого указателя, как показано ниже:

Конечно, мы можем генерировать другие исключения, указав тип исключения, lombok.nonNull.exceptionType = [NullPointerException | IllegalArgumentException] , для достижения этой функции нам нужно создать новый файл lombok.config в корневом каталоге проекта. :

Перекомпиляция класса NonNullExample вызвала для нас исключение недопустимого параметра:

@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor

Приведенные выше три аннотации генерируют для нас конструктор без параметров, указывают конструктор параметров и конструктор, содержащий все параметры.По умолчанию,@RequiredArgsConstructor, @AllArgsConstructorСгенерированный конструктор будет@NonNullАтрибуты проверяются на ненулевое значение.

Конструкторы без параметров хорошо понятны.Давайте в основном рассмотрим последние два, сначала@RequiredArgsConstructor

Из приведенного выше рисунка мы видим, что@RequiredArgsConstructorКогда аннотация генерирует параметризованный конструктор, он будет содержать только final и@NonNullИдентифицированное поле, и мы можем указать staticName для создания объектов путем создания статических методов.

Просмотр файла Employee.class

Когда мы удаляем атрибут staticName, мы смотрим на следующие файлы:

Я думаю, вы заметили детали

@AllArgsConstructorЭто еще проще, проверьте сами

@Data

Введите приведенные выше аннотации, а затем введите@DataЭто очень легко понять,@DataАннотации, применяемые к классам,@ToString, @EqualsAndHashCode, @Getter / @Setterи@RequiredArgsConstructorПроизводительность объединенной силы показана на следующем рисунке:

@Builder

Функциональное программирование, или потоковые операции, становится все более популярным, оно используется в большинстве языков, чтобы сделать программы более лаконичными, читаемыми и написанными более связно.@BuilderОн приносит эту функцию и генерирует серию API-интерфейса строителя.Аннотацию также необходимо применить к классу.Это будет яснее, если посмотреть на следующий пример.

Скомпилированный файл Employee.class выглядит следующим образом:

Маме больше не нужно беспокоиться о проблеме с моим установленным значением, операция потоковой передачи выполнена:

@Log

Эта аннотация должна быть применена к классу. При написании сервисного уровня необходимо добавить некоторые журналы, чтобы найти проблему. Обычно мы определяем статическую константу Logger, а затем применяем ее к тому месту, где мы хотим вести журнал. Теперь аннотация может быть реализовано:

Проверьте файл класса, как мы и ожидали:

Существует много вариантов Log, CommonLog, Log4j, Log4j2, Slf4j и т. д., и ломбок по-прежнему хорошо поддерживается вариантными аннотациями:

То, что я на самом деле использую, это@Slf4jаннотация

val

Учащиеся, знакомые с Javascript, знают, что var может определять переменные любого типа, а в реализации java нам нужно указывать тип конкретных переменных, а val позволяет избавиться от спецификации, а тип точно сопоставляется после Как и функциональное выражение java8, ()->System.out.println("hello lombok"); может быть преобразовано в функциональный интерфейс Runnable.

Просмотрите проанализированный файл класса:

@Cleanup

Когда мы работаем с потоком, нам обычно нужно вызвать метод close, чтобы закрыть или завершить ресурс, и аннотация @Cleanup может помочь нам вызвать метод close и поместить его в блок обработки try/finally, как показано ниже:

Скомпилированный файл класса выглядит следующим образом, мы обнаружили, что он окружен try/finally и вызвал метод close потока

На самом деле после JDK1.7 естьtry-with-resource, нам не нужно явно закрывать поток, посмотрите сами

Суммировать

Основной рабочий процесс Ломбока выглядит следующим образом:

  1. Определение аннотаций времени компиляции
  2. Используйте JSR269 API (Pluggable Annotation Processing API) для создания обработчика аннотаций во время компиляции.
  3. Используйте javac API tools.jar для обработки AST (абстрактного синтаксического дерева)
  4. Зарегистрируйте функцию в пакете jar

Конечно, на Ломбоке много аннотаций. Рекомендую пользоваться достаточно вышеизложенным. Этот инструмент удобен и к нему нельзя привязываться. "Три тысячи слабых вод нужно выпить только одну мерную ложку, а код нужно внимательно читать", Lombok позволяет мне больше сосредоточиться на эффективном коде и устраняет тривиальные непонятные коды (get, set и т. д.), а код, сгенерированный Lombok, может быть таким же удобным, как использование класса инструмента (@Builder).

Для получения дополнительной информации, пожалуйста, посетите официальный сайт:www.projectlombok.org/


вопрос души

  1. почему есть только одно целое@EqualsAndHashCodeаннотация? вместо@Equalsи@HashCode? это норма
  2. Если три метода конструктора применяются одновременно и добавляются@BuilderАннотация, что происходит?
  3. Ваши фонари все еще горят?

  1. Java обновляется так быстро, как гибко переключаться между версиями и управлять ими?
  2. Научите, как настроить стандартный стартер Spring Boot
  3. EasyExcel легко и гибко читает содержимое Excel

Добро пожаловать, чтобы продолжать обращать внимание на общественный номер: «Сун Гун И Бин».

  • Передовая технология Java для обмена галантереей
  • Резюме эффективных инструментов | Ответ на «Инструменты»
  • Анализ вопроса интервью и ответ
  • Сбор технических данных | Ответ на «данные»

Узнайте о стеке технологий Java легко и весело, думая о чтении детективных романов, и постепенно разлагайте технические проблемы на основе принципов упрощения сложных проблем, превращения абстрактных проблем в конкретные и графические, а технология постоянно обновляется, пожалуйста, продолжайте платить внимание...