2017-02-14 4 views
0

Je souhaite créer de manière conditionnelle un Aspect en fonction d'une valeur lue dans le fichier de propriétés. (C'est lié au profilage, c'est pourquoi l'utilisation sélective prévue).Utilisation de @Aspect avec @Conditional

J'ai essayé de créer une classe qui implémente Condition et donc la méthode matches() qui me permettrait d'effectuer la validation nécessaire et régler la sortie du Boolean correspondant, activer ou désactiver.

@Aspect 
@Conditional(MyCondition.class) 
public class MyAspect { 
... 
pointCuts, methods and etc... 
... 
} 

Chose est: Le Aspect est instancié au printemps de toute façon apparemment il ne respecte pas la sortie d'annotation @Conditional.

Y at-il des mises en garde que je manque ici?

Versions:

Spring version: 4.1.4.RELEASE 

AspectJ version: 1.7.3 

(L'arbre de dépendance du projet est un peu compliqué "si la mise à jour libs doit être pris avec un grain de sel :))

+1

Il est un '@ Aspect' et non un' @ Component' .. Il est donc probablement pas numérisé, et vous pourriez ne pas avoir même présent de traitement d'annotation. –

Répondre

1

Vous pouvez gérer à achive conditionnelle Aspect Behaviour si vous enregistrez votre aspect en tant que composant, comme décrit dans la configuration @EnableAspectJAutoProxy.

De la documentation:

permet le support pour la manipulation des composants marqués avec l'annotation @Aspect de AspectJ, similaire à fonctionnalité trouvée dans l'élément XML de printemps. A utiliser sur @Configuration

Notez que @Aspect beans peut être numérisé par composant comme n'importe quel autre. Il suffit de marquer l'aspect à la fois @Aspect et @component:

Donc, votre problème devrait être résolu en ajoutant simplement @component à votre haricot et la mise en place d'un composant d'analyse approprié si nécessaire.

Par exemple:

@Aspect 
@Component 
@Conditional(MyCondition.class) 
public class MyAspect { 
... 
pointCuts, methods and etc... 
... 
}