我已经为评论上的 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 中处理这种情况。