Spring Boot Lombok nedir?
Lombok, Java projesi geliştirirken IDE’ye entegre edilebilen bir anotasyon ile kod üretme (code generation) kütüphanesidir. Lombok ile daha temiz ve daha az kod yazmış oluruz.
Java’da proje geliştirirken yaygın olarak yapmamız gereken bazı işlemler bulunmakta. Bunlar projemizin iş tarafına gerçek bir değer getirmez iken kodumuzun çok fazla ayrıntı barındırmasını zorunlu hale getiriyor.
Örnek olarak Bir POJOda (Plain Old Java Object) Sürekli Get-Set, Constructor, toString vb. methodları yazmamız gerekiyor. Birçok sınıfta olması gereken bu methodlar o kadar uzuyor ki sınıfların uzunluğu ve kod karmaşıklığı artıyor, clean code’dan uzaklaşıyoruz. Hatta artık tutoriallarda sıklıkla gördüğümüz bir şey var;
public class Person {
private long personId;
private String name;
// constructor, getters, setters
}
Evet üstteki kodda yorum satırında gördüğünüz üzere bu methodlar uzun uzun yazılmak istenmiyor.
Tam da burada Lombok hayatımıza giriyor. Yazılım geliştirirken kendimizi daha mutlu ve üretken hale getirmek için tercih sebebimiz oluyor.
Şimdi sıklıkla kullanılan Lombok anotasyonlarına ve ne yaptıklarına bir bakalım;
@Getter: Ait olduğu alanın get methodunu oluşturulmuş olur.
@Setter: Aynı şekilde anatosyonu olduğu fieldin setter methodunu oluşturur.
@Data : @Getter + @Setter işlemlerini ve bunun yanında toString ve EqualsAndHashCode methodların yaptığı işlemleri yapar. Sınıfın üstüne eklenen bir anatosyondur. Sınıf içindeki tüm field lerin getter ve setter methodlarını oluşturur. POJO larda ve Modellerde genellikle tercih edilir.
@AllArgsConstructor: Sınıfın Constructorını üretir.Bu Constructor sınıftaki tüm fieldleri parametre olarak almıştır.
@NoArgsConstructor: Parametresiz Constructor üretir.
@NonNull : Bu anatosyan ile null kontrolü yapabiliriz. @NonNull notasyonu null gelen değer için NullPointerException fırlatmaktadır.
Şimdi sıradan bir Java Model örneğine bakalım. Task adında bir Java sınıfım bulunmakta. Bu model içinde 4 field ve ihtiyacım olan methodlar var.
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.time.LocalDate;
@Entity
public class Task {
@Id
@GeneratedValue
private Long id;
private String name;
private String description;
private LocalDate dueDate;
public Task(String name, String description, LocalDate dueDate) {
this.name = name;
this.description = description;
this.dueDate = dueDate;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public LocalDate getDueDate() {
return dueDate;
}
public void setDueDate(LocalDate dueDate) {
this.dueDate = dueDate;
}
public Task() {
}
@Override
public String toString() {
return "Task{" +
"id=" + id +
", name='" + name + '\'' +
", description='" + description + '\'' +
", dueDate=" + dueDate +
'}';
}
}
Tüm bunları yaptıktan sonra sınıfın büyüklüğü aşağıda gördüğünüz gibi 67 satıra ulaşmış oluyor. Equals and hashcode methodları eklersem bu daha da artacak. Eğer biz bu sınıfı Lombok kullanarak yazsaydık nasıl olurdu bir bakalım;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.time.LocalDate;
@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Task {
@Id
@GeneratedValue
private Long id;
private String name;
private String description;
private LocalDate dueDate;
}
Evet, aynı özelliklere sahip sınıfımızdaki kod sayısı 67'den 23 satıra düştü. Bu iki örnekten de görüleceği üzere yeni sınıfımızda okunurluk arttı ve kod karmaşıklığı azaldı. Daha hızlı geliştirme yaptık diyebiliriz.
Aşağıdaki resimde sağ tarafında Structure’a baktığımızda sınıf içindeki methotların Lombok tarafından oluşturulduğunu aytıntılı olarak görebiliriz. Constructor, Getter-Setter Lombok anotasyonları sayesinde oluşturuldu.
Lombok bağımlılığı pom.xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
Last updated
Was this helpful?