Lombok
Что это
Lombok - проект по добавлению дополнительной функциональности в Java c помощью изменения исходного кода перед
Java компиляцией. При помощи аннотаций можно не писать часть кода.
Основные аннотации
- @NonNull - проверка переменных на отсутствие null.
- @Getter/@Setter - создание getters и setters.
- @ToString - создание toString().
- @EqualsAndHashCode - создает equals() и hashCode().
- @NoArgsConstructor - создание пустого конструктора.
- @RequiredArgsConstructor - создание конструктора только с final полями.
- @AllArgsConstructor - создание конструктора со всеми полями.
- @Data - содержит: @ToString, @EqualsAndHashCode, @Getter, @Setter, @RequiredArgsConstructor.
- @Value - аналог @Data, но для immutable классов. Не содержит @Setter.
- @Builder - реализация паттерна Builder. Также можно указывать на переменные с коллекциями аннотацию.
@Builder(toBuilder = true) - добавляем возможность создания Builder с любого экземпляра.
- @SneakyThrows - позволяет обрабатывать проверенные исключения, не объявляя их в сигнатуре метода.
- @Synchronized - замена слова synchronized.
- @Log - добавление инициализации логирования, так же позволяет выбрать вид логгера: @CommonsLog, @JBossLog,
@Log, @Log4j, @Log4j2, @Slf4j, @XSlf4j.
- @Cleanup - замена try with resources.
- @Singular. Которая поможет по отдельности добавлять в коллекции.
- @With - для создания неизменяемых (immutable) копий объектов с изменённым значением одного из полей.
Она автоматически генерирует метод withFieldName(value), который создаёт копию объекта с новым
значением указанного поля, оставляя остальные поля без изменений. Полезно для работы с immutable объектами.
- Работает только с final полями (чтобы обеспечить неизменяемость объекта).
- Создаёт новый объект при каждом вызове withFieldName(newValue), не изменяя оригинальный.
- Если применить @With к классу, методы with... будут сгенерированы для всех final полей.
- Можно применять к отдельным полям, если не требуется генерация методов для всех.
@Singular
Аннотация дополняющая Builder, применяется на поля типа Map, Set, List и позволяет в builder добавлять
объекты по одному, а не списком.
Без @Singular
@Builder
public class Person {
String name;
List<String> cars;
}
Person person = Person.builder()
.name("A")
.cars(Arrays.asList("fictional", "incidental"))
.build();
С @Singular
@Builder
public class Person {
String name;
@Singular
List<String> cars;
}
Person person = Person.builder()
.name("A")
.car("carA")
.car("carB")
.build();
@SneakyThrows
Аннотация оборачивает выбрасываемые исключения в RuntimeException, что позволяет избежать необходимости
объявления исключений в сигнатуре метода(throws) или использования блоков try-catch.
import lombok.SneakyThrows;
@SneakyThrows
public void someMethod() {
// код, который может бросить IOException
}
Подключение к Spring Boot + Gradle
Узнать последнюю версию в:
https://mvnrepository.com/artifact/org.projectlombok/lombok
build.gradle
def lombokVersion = '1.18.36'
//dependency
//Lombok
compileOnly "org.projectlombok:lombok:${lombokVersion}"
annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
Установить Idea Plugin
Lombok