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

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Utiliser AspectJ pour générer des accesseurs
Un billet de blog de janselmeer

Le , par janselmeer

0PARTAGES

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

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.
Vous avez lu gratuitement 34 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.

Une erreur dans cette actualité ? Signalez-nous-la !