切入点表达式中的多个执行语句,但只有一个正在运行

时间:2012-01-12 11:16:19

标签: java spring-aop

我正在尝试计算“com.company.somemodule”包中的代码性能(包含类R1,R2,..),以及子包中的代码,

  • com.company.somemodule.subPackageA(有A1,A2,......类)
  • com.company.somemodule.subPackageB

我写的切入点类似于以下内容。我能够查看类A1,A2的运行时间,但是我无法查看类R1,R2等的运行时间。

<bean id="timingAdvice"
      class="org.springframework.aop.interceptor.PerformanceMonitorInterceptor" />
<aop:config>
    <aop:advisor
    pointcut="execution(* com.company.somemodule..*.*(..)) OR 
              execution(* com.company.somemodule.*.*(..))"
    advice-ref="timingAdvice" />
</aop:config>

请有人帮忙吗?提前谢谢。

P.S。:我已尝试按照here发布的建议。

2 个答案:

答案 0 :(得分:1)

乍一看我的切入点没有看到任何错误,但我认为通过“内部”切入点表达式和“执行”表达式的组合,您所需要的更容易。

尝试这样的事情:

pointcut="within(com.company.somemodule..*) AND 
              execution(* *(..))"

这是com.company.somemodule包中所有方法执行方法的切入点。

答案 1 :(得分:1)

以K.C。的答案为基础......

我在配置Spring PerformanceMonitorInterceptor方面遇到了类似的问题。下面是一个示例工作配置,用于监视多个包中的方法执行:

<bean id="performanceMonitor"
  class="org.springframework.aop.interceptor.PerformanceMonitorInterceptor" />

<aop:config>
  <aop:pointcut id="allCoreMethods" expression="
      (
           within( org.somepackage.dao..* ) 
        or within( org.somepackage.controller..* )
        or within( org.somepackage.service..* )
        or within( org.somepackage.webservices..* )
      ) 
      AND execution(* *(..))"
  />
  <aop:advisor pointcut-ref="allCoreMethods" advice-ref="performanceMonitor" order="2"/>
</aop:config>