Accueil Nos publications Blog Simplifier l’écriture de vos classes avec Lombok

Simplifier l’écriture de vos classes avec Lombok

800px-large_cayenneAujourd’hui je vais vous présenter une librairie qui va vous faire gagner pas mal de temps dans vos projets. Vous savez le moment où vous définissez vos classes métiers (beans) avec les getters/setters, la définition des méthodes hashCode(), equals() et toString(), le moment où vous multipliez par 10 le code source de vos beans. Ce moment long, fastidieux et répétitif est terminé. Soulagez vos sources et votre IDE et adoptez Lombok !

Le projet Lombok est une librairie qui va vous permettre d’annoter vos classes afin de faire tout cela à la compilation très simplement et sans superflus dans vos sources (et même bien plus encore).

Créer une classe métier simple

Actuellement lorsque vous créez votre bean métier, vous utilisez surement votre IDE préféré afin de générer les getters/setters, ainsi que la redéfinition des méthodes de la classe Object .

Voici un exemple de ce que vous faites actuellement :

[java]public class Person {
    protected Long id;
protected String name;

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;
}

@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((id == null) ? 0 : id.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}

@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person2 other = (Person2) obj;
if (id == null) {
if (other.id != null)
return false;
} else if (!id.equals(other.id))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}

@Override
public String toString() {
return “Person [id=” + id + “, name=” + name + “]”;
}
}[/java]

Contrairement à ce qu’on peut voir dans d’autres langages tel que C# avec ses proprietés.  L’accès aux membres d’une classes Java requiert pas mal de code verbeux qui prend une place inutile dans vos sources. Pourtant tout ceci est nécessaire pour garder le principe d’encapsulation.

Le créateur du projet Lombok s’est dit “enlevons tout ce que nous générons automatiquement et à chaque fois avec notre IDE par une manière plus simple de l’écrire”. Il s’est donc tourné vers les annotations.

Avec Lombok , pour le même résultat, il suffit d’écrire :

[java]import lombok.Data;

@Data
public class Person {
protected Long id;
protected String name;
}[/java]

Comme vous avez pu le voir, l’annotation @Data fait tout pour vous. Elle regroupe d’ailleurs le fonctionnement de plusieurs annotions utilisables indépendamment : @ToString , @EqualsAndHashCode , @Getter , @Setter et @RequiredArgsConstructor .

Les autres cas utiles

Lombok est vraiment une librairie pour simplifier nos taches répétitives, même pour nos classes de services, voici quelques exemples d’utilisation.

Le logger (exemple avec SLF4J) :

Actuellement vous déclarez toujours la même ligne :

[java]public class DummyService {
private static final Logger log = LoggerFactory.getLogger(DummyService.class);
public void process() {
log.info(“Something do to here”);
}
}[/java]

Maintenant avez juste une annotation :

[java]import lombok.extern.slf4j.Slf4j;

@Slf4j
public class DummyService {
public void process() {
log.info(“Something do to here”);
}
}[/java]

Il existe plein d’autres annotations plus ou moins utiles pour vos besoins.
Je vous laisse regarder l’ensemble de ces fonctionnalités sur le site du projet : https://projectlombok.org/features/index.html

Utiliser Lombok dans votre projet

Si votre projet est sous Maven , vous pouvez utiliser la dépendance suivante pour compiler :

<dependency> 
    <groupId>org.projectlombok</groupId> 
    <artifactId>lombok</artifactId> 
    <version>0.12.0</version>
    <scope>provided</scope> 
</dependency>

Ensuite pour que votre IDE prenne en compte l’auto-complétion des méthodes générées par Lombok, il faut : 

Pour Eclipse, vous devez copier le jar de lombok à la racine du dossier et le spécifier dans le bootclasspath en ajoutant les lignes suivantes dans l’ eclipse.ini (après le -vmargs ) :

-vmargs ... -javaagent:lombok.jar -Xbootclasspath/a:lombok.jar

Pour IntelliJ, il existe un plugin disponible ici : https://plugins.jetbrains.com/plugin/?id=6317

Conclusion

Lombok est une librairie vraiment utiles dans le cycle de vie de nos projets pour éviter les taches répétitives et rébarbatives. De plus, il existe des fork de ce projet intéressant, comme lombok-pg ajoutant de nombreuses annotations utiles.

Qui plus est, lombok n’est pas une librairie très intrusive car elle n’est présente qu’à la compilation. Aucun jar n’est inclus dans votre projet et le Bytecode généré est du java standard.

A tout moment vous pouvez vous débarrasser de lombok pour revenir à des classes java sans annotation. Cette fonctionnalité est disponible dans le jar : delombok.

J’espère que vous allez faire de beaux projets maintenant, simples et performants.