Affichage des articles dont le libellé est aop. Afficher tous les articles
Affichage des articles dont le libellé est aop. Afficher tous les articles

01 avril 2011

deloof++

Si vous me suivez sur twitter (@ndeloof) vous savez que je suis papa pour la troisième fois. Oui, annoncer une naissance sur twitter c'est bien un truc de geek, je suis d'accord avec vous, mais je me sens moins seul quand je vois vos messages de félicitation. Celui de Laurent m'a bien fait rire :

public class HuitiemeMerveilleDuMonde implements Bebe {
 
    @Override
    public String getNom() { return "DE LOOF"; }
 
    @Override
    public String getPrenom() { return "Mat :-)"; }
 
    @Override
    public Sexe getSexe() { return Sexe.GARCON; }
 
    @Override
    public double getTaille() { return 53.0d; }
 
    @Override
    public double getPoids() { return 3.400d; }

    @Override
    public String getFelicitations() { 
        return "BRAVO au papa et bon repos à la maman..."; 
    }
 }

Ceci dit, nous sommes ici sur un blog technique, et Laurent se désole de ne pouvoir faire de l'héritage multiple. Je lui propose donc d'utiliser l'AOP !

@Aspect
public class Nananere {

    @Before(" execution( +Parent.dormir() )" )
    public void ouin_ouin() {}
}

Merci à tous

PS: non, très bizarrement, nous ne l'avons pas appelé "Jason"...

UPDATE:
J'apprend à l'instant que ce billet n'est qu'un vague réchauffé de celui-ci. Désolé, je n'ai pas pris le temps de vérifier mes sources pour une fois

05 octobre 2010

@Properties

Comme de bons petit soldats, nous avons appris à définir nos attributs de classe en private et à générer des getter/setter pour y accéder. Nos classes se trouvent ainsi encombrées de ces méthodes sans grand intérêt. Après tout, pourquoi ne pas laisser nos attributs publics ? Pour l'encapsulation vous répondra maître Yoda, en ayant la possibilité (s'il le faut un jour) d'intervenir lors d'un accès aux données de la classe. OK, mais c'est bien dommage de polluer ainsi notre code :'(

On peut bien sûr utiliser exceptionnellement une syntaxe compacte, mais encore faut-il que le formateur de code et les règles Checkstyle de votre Q&A soient réglées en conséquence.

Des langages comme Groovy ou Scala disposent nativement du concept de propriété, qui permet d'intercepter les accès aux données de la classe via un getter/setter, mais seulement quand c'est nécessaire. Pour Java 7, le projet Coin proposait d'ajouter le concept de propriété dans le langage Java. Le sujet a fait débat et je ne suis même pas sur du statut de cette proposition.

Cependant, pour ceux qui aiment bien cette idée, il y a une alternative à attendre cette fonctionnalité dans Java 7 (ou 8 ? ou 9 ?) : lombok

Lombok utilise un hack de l'annotation processor de Java 6 : il vient modifier la structure du code source (la structure AST, pas le fichier .java) pour ajouter des getter et setter à chaque attribut annoté en conséquence. Votre .class comporte donc bien ces méthodes et votre IDE vous laissera les utiliser, mais elles resteront absentes du code source, tant que vous n'avez pas besoin de les définir vous même. Lombok peut faire même beaucoup plus, comme générer equals(), hashcode() et toString(), ou gérer les exceptions ou la synchronisation par simple apposition d'une annotation (dites "méta-programmation", ça fait plus classe). Si cette dernière option peut faire peur - mais rappeler vous la première fois que vous avez fait du spring-aop avec @Transactional - l'utilisation sur les getter/setter justifie l'outil à elle seule.

A tester d'urgence : http://projectlombok.org