Я определил класс для операций CRUD с комментариями. Метод чтения перегружен.
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
}
Проблема: поскольку типы данных для userId и subjectId совпадают, точечное выражение при применении к методу 2 сдвигает значения параметров на 1 место. Это означает, что выражение не понимает, что первый параметр userId не передан. Вместо этого userId получает «subjectId» в качестве значения, а subjectId - в качестве значения соседнего параметра «param».
Примечание
Я стараюсь не писать другой метод, например findUserComments ().
Я хочу поддерживать согласованность во всем приложении. Есть и другие классы с похожими шаблонами операций CRUD.
Вопрос: можно ли определить выражение, применимое к обоим методам, если первый параметр userId является необязательным?
РЕДАКТИРОВАТЬ - Решение Пока я экспериментировал с различными подходами, предложенными в приведенных ниже решениях, я наконец удалил метод 2. Я обрабатываю этот случай в методе 1.