Spring 控制器方法的 AOP 传递参数
Spring AOP pass argument of a controller method
我有如下控制器
@Controller
@RequestMapping(value = "/")
public class HomeController {
@RequestMapping("/")
public String home(Map<String,Object> map) {
map.put("val2","val2");
return "mainpage"; //it is the jsp file name
}
}
现在在我的 class 方法中,我想在控制器方法中定义的这个映射变量中放入另一个值
@Aspect
public class UserInfo {
@Before("execution(* org.controller.HomeController(..)) ")
public void m1(){
//Map<String,Object> map
// get the map here and add
map.put("val1","val1);
}
}
所以当我调用这个地图形式 mainpage.jsp 文件时,我得到两个值作为
${val1}
${val2}
我该怎么做???
您可以在 JoinPoint 上使用 getArgs 来获取方法的参数,例如:
Object[] signatureArgs = joinPoint.getArgs();
你的 m1 方法应该是这样的:
public void m1(JoinPoint joinPoint){
您已经知道您只有 on 方法的参数,因此您需要将其类型转换为映射,然后输入新值并调用 proceed 方法以继续进行进一步的实际调用。
实际上 SMA 的解决方案很好,但不是很优雅和类型安全。如何在切入点中将参数绑定到正确键入且方便命名的参数?
@Before("execution(* org.controller.HomeController.*(..)) && args(map)")
public void m1(Map<String, Object> map) {
map.put("AspectJ", "magic");
}
我有如下控制器
@Controller
@RequestMapping(value = "/")
public class HomeController {
@RequestMapping("/")
public String home(Map<String,Object> map) {
map.put("val2","val2");
return "mainpage"; //it is the jsp file name
}
}
现在在我的 class 方法中,我想在控制器方法中定义的这个映射变量中放入另一个值
@Aspect
public class UserInfo {
@Before("execution(* org.controller.HomeController(..)) ")
public void m1(){
//Map<String,Object> map
// get the map here and add
map.put("val1","val1);
}
}
所以当我调用这个地图形式 mainpage.jsp 文件时,我得到两个值作为
${val1}
${val2}
我该怎么做???
您可以在 JoinPoint 上使用 getArgs 来获取方法的参数,例如:
Object[] signatureArgs = joinPoint.getArgs();
你的 m1 方法应该是这样的:
public void m1(JoinPoint joinPoint){
您已经知道您只有 on 方法的参数,因此您需要将其类型转换为映射,然后输入新值并调用 proceed 方法以继续进行进一步的实际调用。
实际上 SMA 的解决方案很好,但不是很优雅和类型安全。如何在切入点中将参数绑定到正确键入且方便命名的参数?
@Before("execution(* org.controller.HomeController.*(..)) && args(map)")
public void m1(Map<String, Object> map) {
map.put("AspectJ", "magic");
}