Naslovna » Java Web programiranje » Lombok biblioteka ili Record Klase u SpringBoot aplikacijama

Lombok biblioteka ili Record Klase u SpringBoot aplikacijama

Java Web programiranje Builder obrazac Java programiranje Lombok osnove programiranja Record klasa
record vs lombok

Pre nego što odlučimo koji pristup je bolji, potrebno je da se upoznamo sa idejom Record klasa i Lombok biblioteke.

Lombok

Projekat Lombok je Java biblioteka koja se uključuje u projekte radi smanjenja boilerplate koda. Koristeći Lombok, gubi se potreba za pisanjem šablonskih get-set, i equals metoda.
Pomoću anotacija, postižemo isto ponašanje, a gubimo potrebu da za svaku Bean klasu ponavljamo isti proces.

//Klasičan Bean primer
@Data//Ova anotacija u pozadini dodaje boilerplate
public class Identification {
private String idType;
private String idNumber;
}

@Data anotacija sada predstavlja prečicu za @ToString, @EqualsAndHashCode, @Getter za sva polja, @Setter za sva polja koja nisu finalna kao i @RequiredArgsConstructor.

Record klase

Record klase su predstavljene u Javi 14 i za cilj imaju uklanjanje boilerplate koda. Preporučene su za pravljenje klasa koje se koriste za prenos podataka.

public record Employee(Long id, String firstName, String lastName,  String email, int age) {
// U zapisu možete imati druge metode
}
// Poziv Record-a
Employee e = new Employee(1L, "Pera", "Peric", "pera@pera.com", 32);
System.out.println( e.id() );     //1
System.out.println( e.email() );  //pera@pera.com

Neizmenjivost Record klasa i @Value anotacija u Lombok biblioteci

Recordi su podrazumevano immutable, što znači da su svi atributi implicitno postavljeni na final, i vrednosti moraju da se postave kroz konstruktor.

Ukoliko želimo da postignemo istu stvar koristeći Lombok, iskoristili bismo @Value anotaciju.

Kada se koristi @Value nad klasom, Lombok automatski generiše sledeće:

  1. Finalna polja: Sva polja u klasi postaju final, što znači da im se vrednosti ne mogu promeniti nakon što su inicijalizovane u konstruktoru.
  2. Konstruktor: Generiše se konstruktor koji uzima sve polja kao argumente i inicijalizuje ih prilikom instanciranja objekta.
  3. Get metode: Generiše se javna get metoda za svako polje u klasi, omogućavajući pristup vrednostima polja.
  4. toString() metoda: Generiše se toString() metoda koja vraća string reprezentaciju objekta, uključujući sve njegove polja.
  5. equals() i hashCode() metode: Generiše se equals() i hashCode() metoda koja upoređuje objekte na osnovu njihovih polja.

Builder obrazac

Builder obrazac je uvek dobar izbor za kreiranje objekata. Lombok ima odličnu podršku za njega kroz jednostavnu @Builder anotaciju. Java Record nema takvu opciju.

@Builder //jednostavnim dodavanjem, Lombok se brine o boilerplate-u
public class Identification {
private String idType;
private String idNumber;
}

Nasleđivanje

U vreme pisanja teksta, Record klase ne podržavaju nasleđivanje direktno, dok Lombok ovo podržava kroz anotacije.

Iako je asocijacija sjajan način za modelovanje Bean klase, Lombok nam omogućuje oba pristupa.

// Nasleđivanje pomoću Lombok-a
@Data
class FourWheeler{
private String engineType;
}
@Data
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
class Car extends FourWheeler{
private Integer carCapicity;
private String carModel;
}

Record može da bude odličan izbor kada ne želimo boilerplate kod I kada težimo clean code pristupu. Ukoliko želimo da koristimo builder, immutability, mutability i bean konvencije, Lombok je očigledan pobednik.