2017-09-07 2 views
0

J'essaie d'ajouter Spring AOP à mon projet Spring Boot (1.5.6). Je l'ai déjà fait sur d'autres projets, donc je suis familier avec la façon de l'utiliser. J'ai créé une annotation et l'ai utilisée comme point de coupe. Le problème auquel je suis confronté cette fois-ci est que le bean conseillé n'est pas sollicité, donc mon aspect ne se déclenche pas. J'ai ajouté ce qui suit aux projets:Printemps AOP autoproxy ne fonctionne pas

  • spring-boot-starter-aop
  • un haricot marqué avec @Aspect et @Component
  • une méthode dans l'aspect annoté avec @Before("@annotation(com.xyz.MeasureThis)")
  • et last but not least une méthode de service annoté avec @MeasureThis

La méthode de service est appelée à partir d'un RestController. Quand je le débogue, je vois que le bean de service injecté n'est pas du tout mandaté.

La question est de savoir s'il pourrait y avoir quelque chose de difficile que je pourrais éventuellement oublié de prendre en considération? Je ne connais pas les détails de l'autoproxie, donc il y a peut-être quelque chose que je ne connais pas. En créant un nouveau projet à partir de zéro, j'ai réussi à le faire fonctionner, mais dans mon projet existant, il ne veut pas faire ce que je veux. Je ne poste aucun échantillon de code car il s'agit davantage d'une question générique.

+0

La méthode de service sans aucun doute dans un printemps haricot? Spring ne va pas substituer des objets qu'il ne gère pas en tant que beans, contrairement au "vrai" AspectJ. – slim

+0

PS Question générique ou pas, je pense que vous devriez créer un MVCE de toute façon. Cela peut vous aider à trouver le problème. – slim

+0

@slim concernant votre premier commentaire: oui c'est. pour votre deuxième commentaire: comme je l'ai dit, j'ai créé un projet de démarrage à partir de rien pour voir s'il y a quelque chose que je fais de mal et ça fonctionne bien. Je pourrais vous envoyer un exemple de code de travail, mais cela n'aiderait pas. Je crois que le problème est quelque part plus profond, c'est-à-dire des dépendances ou une configuration conflictuelle ... – Balazs

Répondre

0

Je vais essayer de changer pointcut à @Before ("exécution (* * (..)) & & @annotation (com.xyz.MeasureThis)")

+0

aspectjweawer est livré avec le démarreur et l'annotation n'est pas nécessaire pour les applications Spring Boot AFAIK. – Balazs

+0

Je ne suis pas sûr que changer complètement votre réponse - rendant ainsi mon commentaire insignifiant - est la bonne chose ... mais de toute façon concernant votre réponse éditée: l'extraction de pointcuts est facultative, elle devrait fonctionner sans cela aussi bien. – Balazs

+0

Il ne s'agit pas d'extraire des pointcuts mais de combiner les conditions – vRaptor