Lombok

Проектът Lombok е базирана на анотации Java библиотека, която ви позволява да намалите шаблонния код. Lombok предлага различни анотации, насочени към замяна на Java код, който е шаблонен, повтарящ се или досаден за писане. Като използвате Lombok можете да избегнете писането на конструктори без аргументи, toString(), equals() и hashCode() методи като добавите няколко анотации. По време на компилиране библиотеката инжектира байт кода, представляващ желания шаблонен код в .class файловете.

Добавяне на библиотеката:

<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <optional>true</optional>
</dependency>

За изключване на Lombok от крайния jar файл:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <excludes>
            <exclude>
                <groupId>org.project-lombok</groupId>
                <artifactId>lombok</artifactId>
            </exclude>
        </excludes>
    </configuration>
</plugin>

Най-често използвани анотации

@Getter, @Setter

Когато дадено поле е анотирано с @Getter и/или @Setter, Lombok автоматично генерира съответно гетър и/или сетър по подразбиране. Генерираният метод по подразбиране ще бъде public, освен ако не е зададен AccessLevel. Възможните опции за последния са PUBLIC, PROTECTED, PACKAGE и PRIVATE.

С анотациите @Getter и @Setter можете да коментирате и целия клас. В този случай логиката ще бъде приложена към всяко поле на класа. Можете ръчно да деактивирате генерирането на getter/setter за дадено поле, като използвате опцията AccessLevel.NONE.

@NoArgsConstructor, @RequiredArgsConstructor,@AllArgsConstructor

Когато даден клас е анотиран с @NoArgsConstructor, Lombok автоматично генерира конструктор без параметри. По същия начин, когато се анотира с @AllArgsConstructor, ще се генерира конструктор с параметри за всяко поле на класа.

@RequiredArgsConstructor води до конструктор с параметър за всяко поле, което изисква специална обработка - неинициализирани final полета, както и всички полета, маркирани като @NonNull,но неинициализирани на мястото на тяхната декларация.

Статичните полета ще бъдат игнорирани от тези анотации.

@ToString

Ако даден клас е анотиран с @ToString, Lombok ще се погрижи за генерирането на метода. По подразбиране ще бъде върнат низ, съдържащ името на класа, последвано от стойностите на всяко поле, разделени със запетая. Ако зададете стойност на параметъра includeFieldNames true, името на всяко поле ще бъде поставено преди неговата стойност. По подразбиране всички нестатични полета ще бъдат взети предвид при генерирането на метода. Анотирайте поле с @ToString.Exclude, ако искате Lombok да го игнорира.

@EqualsAndHashCode

Анотирайте клас с @EqualsAndHashCode и Lombok автоматично ще създаде методите. По подразбиране всички нестатични, нетранзитивни полета ще бъдат взети под внимание. Можете да промените кои полета да се използват, като ги анотирате с @EqualsAndHashCode.Include или @EqualsAndHashCode.Exclude. Като алтернатива можете да анотирате своя клас с @EqualsAndHashCode(onlyExplicitlyIncluded=true) и след това да посочите точно кои полета или методи искате да се използват, като ги анотирате с @EqualsAndHashCode.Include.

@NonNull

Можете да анотирате със @NonNull поле, параметър на метод или цял конструктор. По този начин Lombok ще генерира null проверки за съответния компонент.

Без библиотеката Lombok кодът би имал следния вид:

@Data

@Data е анотация, която събира в едно цяло анотациите @ToString, @Getter, @Setter, @EqualsAndHashCode и @RequiredArgsConstructor. По този начин генерира всички шаблони, необходими за POJO клас. А именно: гетъри за всички полета, сетъри за всички non-final полета, имплементации на toString, equals и hashCode, включващи всички полета от класа и конструктор за всички полета, изискващи специална обработка.

Last updated

Was this helpful?