AspectJ方面不使用@RequestMapping注释编织Spring MVC方法
我有一个独立的aspectJ库(与spring没有任何关系),我添加到应用服务器类路径中以使用加载时间编织来监视正在运行的应用程序
该方面完全适用于所有方法(域,服务,DAO ...),但由于某些原因,即使切入点表达式与控制器类和方法名称匹配,它也无法使用@RequestMapping注释识别Spring MVC方法
Spring MVC控制器映射方法(或其他框架中的控制器)是否有不同的规则需要单独处理?
该方面在@Controller类中编织到其他公共和私有方法中,但没有专门用于@RequestMapping方法。
注意:我不想寻找一个Spring MVC特定的解决方案(除非它是唯一的选择),我希望能够编织成任何类型的类和方法,而无需修改正在运行的应用程序。
这是我的代码。
public aspect MethodExecutionTimeAspect {
private CollectedData collectedData;
public MethodExecutionTimeAspect() {
// some initialiation logic.
}
pointcut publicOperation() : execution(public * com.mycompany.myproject..*());
Object around() : publicOperation() {
// do something
Object ret = proceed();
// do something.
return ret;
}
}
package com.mycompany.myproject.webapp.springmvc;
@Controller
public class HomeController {
@Resource(name="productService")
private ProductService productService;
@RequestMapping(value = {"/home.do", "/"})
public String displayHomePage(ModelMap map) {
List<Product> featuredProducts = productService.getFeaturedProducts();
map.put("featuredProducts", featuredProducts);
return "homePage";
}
}
切入点只匹配没有任何参数的方法。 displayHomePage方法接受一个map参数。 尝试
pointcut publicOperation() : execution(public * com.mycompany.myproject..*(..));
通过添加..
这个切入点将匹配指定包中的任何公共方法,而不管有多少个参数 - 如果有的话。
上一篇: AspectJ aspect not weaving Spring MVC methods with @RequestMapping annotation
下一篇: Spring AOP: @AfterThrowing execution pointcut never matches