Est-ce que je peux m'en servir pour générer des accesseurs dans une bean ?
Pour le savoir, je crée un bean avec un attribut property :
Code java : | Sélectionner tout |
1 2 3 4 5 6 | public class SampleBean { public String property; } |
Maintenant, je crée un aspect dans lequel je déclare les accesseurs de l'attribut property.
La syntaxe est simple : il suffit de préfixer le nom des méthode par le type cible (ici SampleBean) :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | privileged aspect SampleBean_propertyITD { public String SampleBean.getProperty() { System.out.println("SampleBean.getProperty() généré par ITD"); return this.property; } public void SampleBean.setProperty(String value) { System.out.println("SampleBean.setProperty(value) généré par ITD"); this.property = value; } } |
Maintenant j'aimerais pouvoir invoquer mes accesseurs automatiquement lorsque j'utilise l'attribut.
Je crée donc des advices qui peuvent tirer parti de mes méthodes générées par ITD.
Cette fois-ci la syntaxe est un peu plus compliquée mais reste compréhensible :
Code java : | Sélectionner tout |
1 2 3 4 5 6 7 8 | java.lang.String around(SampleBean instance) : get(java.lang.String SampleBean.property) && target(instance) && ! withincode(java.lang.String SampleBean.getProperty()) { return instance.getProperty(); } void around(SampleBean instance, java.lang.String value) : set(java.lang.String SampleBean.property) && args(value) && target(instance) && ! withincode(void SampleBean.setProperty(*)){ instance.setProperty(value); } |
Il ne reste plus qu'à utiliser mon SampleBean :
Code java : | Sélectionner tout |
1 2 3 4 | SampleBean bean = new SampleBean(); bean.property = "value"; value = bean.property; |
L'exécution de ce code affiche les lignes suivantes dans la console :
SampleBean.setProperty(value) généré par ITD
SampleBean.getProperty() généré par ITD
SampleBean.getProperty() généré par ITD
Mais heureusement, il y a une solution : générer les aspects. Pour cela je montrerai dans un prochain billet comment utiliser un AnnotationProcessor.