Je dois gérer toutes les exceptions qui sont levées à partir de méthodes publiques de classe annotées avec des annotations. J'essaie d'utiliser Spring AOP. Ceci est mon enregistreur:AOP de printemps. Comment faire pointcut pour toutes les méthodes publiques dans la classe annotée
@Aspect
public class Logger {
private final Logger log = LoggerFactory.getLogger(this.getClass());
@Pointcut("@annotation(loggable)")
public void isLoggable(Loggable loggable) {
}
@AfterThrowing(pointcut = "isLoggable(loggable)", throwing = "e")
public void afterThrowing(Loggable loggable, Exception e) throws Throwable {
log.error("AFTER", e);
}
@Loggable
est mon annotation. J'ai ajouté @EnableAspectJAutoProxy
à ma classe de configuration.
D'abord, j'ai essayé d'annoter une méthode de méthode qui déclenche une exception. Cela fonctionne bien mais comment puis-je faire fonctionner ce travail pour toutes les méthodes publiques en classe annotées avec @Loggable
annotation?
Est-ce que votre 'Logger' est un' @ Bean' ... Un '@ Aspect' n'est pas un' @ Component' et en tant que tel, les composants ne seront pas analysés. SO soit l'enregistrer en tant que bean ou ajouter '@ Component' pour le détecter ou créer un' @ ComponentScan' pour balayer tous les beans annotés avec '@ Aspect'. De toute façon, votre aspect doit devenir un haricot, sinon il n'existe pas et rien ne se passera. –
Votre solution avec des conseils @around est correcte. Essayez de déboguer, vérifiez chaque fois que le conseil est exécuté. –
@ M.Deinum Merci! C'était une erreur très stupide. – Kirill