0

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

}

4

1 回答 1

3

切入点只匹配没有任何参数的方法。displayHomePage 方法采用地图参数。尝试

pointcut publicOperation() : execution(public * com.mycompany.myproject..*(..));

添加后,..此切入点将匹配您指定包中的任何公共方法,无论有多少参数 - 如果有的话。

于 2013-06-03T21:32:27.353 回答