2010-01-15 10 views
28

Je suis en train de lire sur le printemps à l'heure actuelle et l'un des exemples utilisés pour l'utilisation d'AOP est la journalisation du début et de la fin des appels de méthode.Utilise Spring AOP pour enregistrer une bonne idée?

J'ai également lu que l'utilisation d'AOP peut avoir un impact sur les performances.

L'utilisation de Spring AOP est-elle une bonne idée pour ce type de journalisation? Ma compréhension est que Spring utilise Dynamic AOP serait-il préférable d'utiliser Static AOP (Like AspectJ) pour ce type d'AOP. Actuellement, la politique de codage de la société pour laquelle je travaille nécessite une quantité ridicule de journalisation et je veux réduire le nombre de codes de journalisation que je dois écrire et améliorer la lisibilité de mon code.

Est-ce que j'aboie le mauvais arbre?

Répondre

13

Lisez this blog-post pour connaître vos problèmes de performances.

La façon de penser à l'AOP est de mettre les avantages fonctionnels fournis en premier lieu. Si la journalisation automatisée est votre exigence et que l'AOP s'y adapte - allez-y. Cela dit, le tissage au temps de chargement est, bien entendu, préféré si une diagraphie à grain fin est requise.

32

I utilisé Spring AOP pour la mise en œuvre l'exploitation forestière, donc je partage mes observations:

  • Impact sur les performances ne suffit pas, elle est inférieure à l'impact de l'exploitation forestière se
  • aspects ayant configurés dans la configuration Spring, vous pouvez pour désactiver complètement le code de consignation si nécessaire
  • Le débogage devient plus problématique car les traces de la pile deviennent plus longues
  • Cette décision affecte suffisamment la conception. Ce n'est pas seulement que vous obtenez un tas d'interfaces et de classes d'aspect, mais vos classes de production doivent être très "minces". N'oubliez pas, vous ne pouvez pas intercepter les appels à des méthodes non publiques. Les appels personnels (même vers des méthodes publiques) ne peuvent pas non plus être interceptés (car vous manipulez la poignée this nue à la place du handle enveloppé par AOP) et ne peuvent donc pas être journalisés. Donc, toute la journalisation peut se produire uniquement sur les limites de l'interface. (Cela concerne le tissage d'aspect à base de proxy, il y a une option de sous-classe d'exécution avec cglib, mais je ne l'ai pas utilisée)
  • L'écriture de point peut être très compliquée. IntelliJ Idea aide grandement à déterminer quelles méthodes doivent être conseillées par pointcut.
  • En général, j'aimais bien cette approche et je pense qu'il est intéressant d'utiliser, mais il semble beaucoup plus compliqué que prévu
3

Je l'ai fait de façon similaire à la manière décrite dans this blog post. C'est le meilleur que j'ai trouvé et il a aussi un sample qui montre bien la différence entre utiliser et ne pas utiliser AOP. A mon avis, ça ne vaut pas le coup, à moins que vous ne fassiez quelque chose de fantaisiste, puis de journalisation, comme la gestion des erreurs avec persistance. Si vous avez une bonne hiérarchie d'exception (domaine, système) et que vous définissez correctement les limites de journalisation, vous ne réduisez pas beaucoup le code de journalisation.

+0

Le lien est pour le blog et non le blog pour le sujet en question –