предисловие
В 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
, нам не нужно явно закрывать поток, посмотрите сами
Суммировать
Основной рабочий процесс Ломбока выглядит следующим образом:
- Определение аннотаций времени компиляции
- Используйте JSR269 API (Pluggable Annotation Processing API) для создания обработчика аннотаций во время компиляции.
- Используйте javac API tools.jar для обработки AST (абстрактного синтаксического дерева)
- Зарегистрируйте функцию в пакете jar
Конечно, на Ломбоке много аннотаций. Рекомендую пользоваться достаточно вышеизложенным. Этот инструмент удобен и к нему нельзя привязываться. "Три тысячи слабых вод нужно выпить только одну мерную ложку, а код нужно внимательно читать", Lombok позволяет мне больше сосредоточиться на эффективном коде и устраняет тривиальные непонятные коды (get, set и т. д.), а код, сгенерированный Lombok, может быть таким же удобным, как использование класса инструмента (@Builder).
Для получения дополнительной информации, пожалуйста, посетите официальный сайт:www.projectlombok.org/
вопрос души
- почему есть только одно целое
@EqualsAndHashCode
аннотация? вместо@Equals
и@HashCode
? это норма - Если три метода конструктора применяются одновременно и добавляются
@Builder
Аннотация, что происходит? - Ваши фонари все еще горят?
- Java обновляется так быстро, как гибко переключаться между версиями и управлять ими?
- Научите, как настроить стандартный стартер Spring Boot
- EasyExcel легко и гибко читает содержимое Excel
Добро пожаловать, чтобы продолжать обращать внимание на общественный номер: «Сун Гун И Бин».
- Передовая технология Java для обмена галантереей
- Резюме эффективных инструментов | Ответ на «Инструменты»
- Анализ вопроса интервью и ответ
- Сбор технических данных | Ответ на «данные»
Узнайте о стеке технологий Java легко и весело, думая о чтении детективных романов, и постепенно разлагайте технические проблемы на основе принципов упрощения сложных проблем, превращения абстрактных проблем в конкретные и графические, а технология постоянно обновляется, пожалуйста, продолжайте платить внимание...