问
有一个Controller的方法addw(int name){},返回值为void,映射路径是/addw,前端传入的参数有name、id、age,现在希望在不改变Controller的方法的前提下,使用AOP切入一个新的方法addall(),此时,addall方法可以获取的参数有什么?
答
如果您不想改变Controller的方法addw(),并使用AOP切入一个新的方法addall(),则addall()方法可以获取的参数仅限于在AOP切面中能够获取的参数。在AOP切面中,您可以获取方法执行时的JoinPoint对象,并从中提取方法的参数、返回值和其他相关信息。
具体来说,在这种情况下,addall()方法可以从JoinPoint对象中获取方法执行时的参数、方法名、类名、返回值等信息,但不能直接获取前端传入的参数’id’和’age’,因为它们没有被Controller方法addw()所接收。
因此,如果您需要在addall()方法中获取前端传入的参数’id’和’age’,则需要对Controller方法进行修改,以便能够接收这些参数,并在AOP切面中使用@RequestParam注解来获取它们。例如:
@Controller
public class MyController {
@RequestMapping(value = "/addw", method = RequestMethod.POST)
public void addw(@RequestParam int name, @RequestParam int id, @RequestParam int age) {
// 在这里获取所有参数并执行一些操作
}
@RequestMapping(value = "/addall", method = RequestMethod.POST)
public void addall() {
// 在这里执行一些操作
}
}
@Aspect
@Component
public class MyAspect {
@AfterReturning("execution(* com.example.MyController.addw(..))")
public void addwInterceptor(JoinPoint joinPoint, @RequestParam int name, @RequestParam int id, @RequestParam int age) {
// 在这里可以获取请求中的所有参数,包括'id'和'age'
}
@AfterReturning("execution(* com.example.MyController.addall(..))")
public void addallInterceptor(JoinPoint joinPoint) {
// 在这里执行一些操作
}
}
在这个例子中,我们将Controller方法addw()修改为接收所有参数,并在AOP切面中使用@RequestParam注解来获取它们。这样,在addw()方法执行完毕后,AOP切面就可以获取到所有参数,并在addall()方法中使用它们。同时,我们在切面类中使用@AfterReturning注解来切入addw()和addall()方法,并在这些方法执行完毕后执行一些操作。