Я определил класс для операций CRUD для комментариев. Метод чтения перегружен.spring AoP, выражение pointcut для перегруженных методов с одинаковыми параметрами
class Comment{
// method 1: returns all the comments by a user
findAll(long userId, long subjectId, String param);
// method 2: returns all the comments of all the users
findAll(long subjectId, String param)
}
Выражение точки разреза Я попытался это
@Around("execution(* com.package..*Controller.findAll(..)) && args(userId,subjectId,..)")
public Object validateFindAll(final ProceedingJoinPoint proceedingJoinPoint, final long userId, final long subjectId) {
// validate userId, if available
// validate subjectId
}
Проблема: Поскольку типы данных ID_пользователя и subjectId такие же, выражение точки, когда применяется к методу 2 сдвигает значения Param на 1 место. Это означает, что выражение не понимает, что первый параметр userId не передается. Вместо этого userId получает значение «subjectId» в качестве значения, а subjectId получает смежный параметр «param» в качестве значения.
Примечание
Я пытаюсь избежать написания другой метод, как findUserComments().
Я хочу поддерживать согласованность в приложении. Существуют и другие классы с похожими шаблонами операций CRUD.
Вопрос: Можно ли определить выражение, применимое к обоим методам с первым параметром является идентификатор пользователя необязательным?
EDIT - Решение Пока я играл с различными подходами, предложенными в качестве решений, приведенных ниже, я, наконец, удален метод 2. Я обрабатывать этот случай в методе 1.
Спасибо! создал еще один pointcut. –