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 :

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 + "]";
}
  }

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 :

import lombok.Data;

    @Data
    public class Person {
    protected Long id;
    protected String name;
    }

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 :

public class DummyService {
    private static final Logger log = LoggerFactory.getLogger(DummyService.class);
    public void process() {
    log.info("Something do to here");
    }
    }

Maintenant avez juste une annotation :

import lombok.extern.slf4j.Slf4j;

    @Slf4j
    public class DummyService {
    public void process() {
    log.info("Something do to here");
    }
    }

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 : http://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 : http://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.

Nombre de vue : 2093

COMMENTAIRES 7 commentaires

  1. Philippe BAYE dit :

    Adepte convaincu de lombok, je tenais à souligner 2 points :
    – En cas de modification du nom d’un attribut “toto” en “titi” annoté (par exemple avec @Getter), le refactoring n’est pas automatique (en tout cas sous Eclipse) sur les appelants. Il faut alors changer les getToto() en getTiti().
    – L’option delombok est très utile avant de lancer une analyse de code (PMD, ..). Ca évite de se retrouver avec de fausses violations.

  2. Mijas Antoine dit :

    Lombok est non seulement une île magnifique d’indonésie, mais aussi une marque déposée.
    Surprenant de prendre ce nom pour une utilisation professionnelle dansle domaine de l’informatique…….

  3. Maxime Lenglet dit :

    Une marque déposée… d’ameublement ? Donc quel rapport avec l’informatique ?
    D’autant que le code est sous licence open source (MIT).

  4. Tony Georges dit :

    Bonjour,

    Comment se comporte Lombok dans un environnement de compilation continue utilisant maven ou ant ?
    Avez vous des préconisations particulières ?

  5. Yves Martin dit :

    Bonjour,

    Intéressant mais j’imagine que le débogueur de Eclipse ne doit pas être particulièrement ravi…

    Apparemment Oracle préfère proposer sa propre implémentation plutôt que d’accepter Lombok comme JSR: https://groups.google.com/forum/#!topic/javaposse/1WkhNysq9VE

    Encore un exemple de contournement de l’absence de préprocesseur dans la chaîne de compilation pour étendre le language Java. C’était “commons-attributes” avant les Annotations, et maintenant c’est de la génération de code à partir d’Annotations (pas conçu pour ça au départ)

  6. Sophie dit :

    La création ainsi que l’écriture de nos classes devient actuellement facile depuis l’existence du projet Lombok. Cette procédure permet de gagner encore plus de temps et d’éviter les parties compliquées et ennuyeuse lors de la création du Bean métier car il va le faire tout seul. C’est fou que la technologie puisse nous aider et nous rendre la vie un peu facile.

AJOUTER UN COMMENTAIRE