IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

janselmeer

[Actualité] Utiliser AspectJ pour générer des accesseurs

Noter ce billet
par , 16/09/2015 à 21h38 (1690 Affichages)
Pour ceux qui ne connaissent pas l'ITD d'AspectJ (Déclaration Inter-Types), cela permet de rajouter des éléments dans les classes via un aspect : attributs; méthodes, annotations, héritage d'interface...
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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 - Visualiser dans une fenêtre à part
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
Tout ça, c'est bien mais comment je fais pour générer les accesseurs pour plusieurs beans ? C'est là que l'on atteint la limite d'AspectJ : il faut créer un aspect pour chaque propriété

Mais heureusement, il y a une solution : générer les aspects. Pour cela je montrerai dans un prochain billet comment utiliser un AnnotationProcessor.

Envoyer le billet « Utiliser AspectJ pour générer des accesseurs » dans le blog Viadeo Envoyer le billet « Utiliser AspectJ pour générer des accesseurs » dans le blog Twitter Envoyer le billet « Utiliser AspectJ pour générer des accesseurs » dans le blog Google Envoyer le billet « Utiliser AspectJ pour générer des accesseurs » dans le blog Facebook Envoyer le billet « Utiliser AspectJ pour générer des accesseurs » dans le blog Digg Envoyer le billet « Utiliser AspectJ pour générer des accesseurs » dans le blog Delicious Envoyer le billet « Utiliser AspectJ pour générer des accesseurs » dans le blog MySpace Envoyer le billet « Utiliser AspectJ pour générer des accesseurs » dans le blog Yahoo

Mis à jour 17/09/2015 à 20h36 par janselmeer

Tags: aspectj
Catégories
Java

Commentaires