Я использую spring-boot 2.0.5 в сочетании с spring-data-rest.Я хотел бы добавить совет на основе AspectJ к некоторым стандартным методам CrudRepository, использующим Spring-data-rest, таким как find, findAll и save.
Независимо от того, как я определяю точки, совет никогда не применяется.
Я использую LoadTimeWeaving (LTW), который, вообще говоря, кажется, работает.
Может кто-то пролить свет на то, почему это может иметь место?Можно ли вообще заменить spring-aop на AOP на основе AspectJ?
Я прочитал документацию Spring для AOP (AspectJ и spring-aop), а также инструкции по использованию AspectJ в сочетании с spring-AOP, что я мог найти с помощью Google.Все примеры, которые я мог найти, говорят о добавлении рекомендаций на основе AspectJ к методам сущностей, но не к методам репозитория spring-data-rest.
Я также мог бы найти здесь один очень похожий вопрос по stackoverflow ( AspectJ pointcut onметод в Spring CrudRepository ).Но на этот вопрос никогда не было ответа.Вместо этого автор предоставил обходной путь для своей конкретной проблемы.И этот обходной путь не применим к моим требованиям.
Одно из моих определений точек в ApsectJ в "PointCuts.aj":
public pointcut repositoryFindMethods(): execution(* *..CrudRepository+.find*(..));
Этот pointcut должен соответствовать всем методам внутри любого интерфейса / классанаследуется от CrudRepository из spring-data-rest, имя метода которого начинается с «find» и имеет любое количество параметров.
Рекомендации, основанные на этом определении pointcut, никогда не применяются / не выполняются, например:
Object around() : PointCuts.repositoryFindMethods() { .... }
никогда не будет вызываться.
Однако, совет будет применяться, как и ожидалось, если я использую spring-aop для реализации и указываю pointcut как:
@Pointcut("execution(* *..CrudRepository+.find*(..))")
public void repositoryFindMethods() {}
в "PointCuts.java""и реализовать рекомендации, используя стиль spring-aop:
@Around("PointCuts.repositoryFindMethods()")
public Object aroundRepositoryFindMethods(ProceedingJoinPoint proceedingJoinPoint) { ... }
Поскольку мне требуется, чтобы ApsectJ реализовывал рекомендации в другом месте кода, я хотел бы реализовать рекомендации для методов Spring-data-rest CrudRepository, основанных наAspectJ тоже.