我有一个独立的 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";
}
}