Ce que je dois faire est assez simple en utilisant des intercepteurs mais j'espérais vraiment une solution plus élégante basée sur des annotations. Le truc c'est que ma "solution" ne marche pas vraiment et je ne sais pas pourquoi. Peut-être que ce n'est même pas possible.Annotation personnalisée pour la méthode dans le contrôleur qui étend un contrôleur abstrait
Ma pile de base est: chaussure de ressort 1.4.1:
- ressort-boot-démarreur-bande
- ressort-boot-démarreur-aop
- ressort-boot-démarreur-JDBC
- printemps-boot-démarreur-cache
printemps-haricots 4.3.4 et divers autres services publics et des pots d'essai.
J'ai plusieurs contrôleurs qui étendent un contrôleur abstrait. Ce contrôleur abstrait doit préparer une connexion, puis chaque contrôleur utilise sa propre implémentation spécifique placée dans la méthode acquire(). De temps en temps, certains emplois cron atteignent ces points limites. Nous voulons faire une vérification sur certains contrôleurs/emplois, mais pas nécessairement tous. Je pensais donc à ajouter une annotation personnalisée là où l'audit devrait être.
public abstract class ImportController {
@RequestMapping(value = "/checkout", method = RequestMethod.GET, produces = "application/json")
public String importEntities() {
//some code here ....
MyResult result = acquire(param);
//some code again ....
}
public abstract MyResult acquire(MyParam param)
}
mise en œuvre qui a besoin de vérification:
@RestController
@RequestMapping(value = "/cars")
public class CarsImportController extends ImportController {
@Override
@MyJobAudit // <--- this should add a pointcut used for Audit logging
public MyResult acquire(MyParam param) {
//cars specific code
}
}
La mise en œuvre qui n'a pas besoin d'audit
@RestController
@RequestMapping(value = "/tomatoes")
public class TomatoesImportController extends ImportController {
@Override
//no audit annotation
public MyResult acquire(MyParam param) {
//tomatoes specific code
}
}
Mon annotation JobAudit:
@Retention(RetentionPolicy.RUNTIME)
public @interface MyJobAudit {
}
et la classe aspects:J'ai essayé de mettre mon annotation sur différentes classes de service et cela fonctionne. Mais pas sur acquérir() méthode. Quelque chose ne va vraiment pas ici. Je ne peux pas comprendre ce que ...
Pouvez-vous confirmer que votre méthode 'acquire()' est vraiment 'public'? Parce que Spring Aspects ne fonctionne que sur les méthodes publiques. –
Oui, c'est public – Buzzo