【问题标题】:How can I log private methods via Spring AOP?如何通过 Spring AOP 记录私有方法?
【发布时间】:2016-02-09 18:48:07
【问题描述】:

我无法使用 spring aop 性能日志记录私有方法。 下面是我在下面配置中使用的配置

<aop:config proxy-target-class="true">
        <aop:pointcut id="allServiceMethods" expression="execution(* com.mycom.app.abc..*.*(..))"/>
        <aop:advisor pointcut-ref="allServiceMethods" advice-ref="performanceMonitor" order="2"/>
    </aop:config>

我的课程路径上有cglib jar。

【问题讨论】:

  • 我有一些嵌套的私有方法调用,也想记录它们
  • 恐怕嵌套调用是一个类似的问题。该方面仅在从外部调用该方法时才有效,我猜是因为在 bean 内部调用时不使用 AOP 代理。

标签: spring aop aspectj spring-aop aopalliance


【解决方案1】:

你必须使用编译时编织而不是使用 Spring AOP 的代理。

来自Spring AOP - Supported Pointcut Designators

由于 Spring 的 AOP 框架基于代理的性质,根据定义,受保护的方法不会被拦截,对于 JDK 代理(如果不适用)和 CGLIB 代理(这在技术上可行但不推荐用于 AOP目的)。因此,任何给定的切入点都只会与公共方法匹配!

如果您的拦截需求包括受保护/私有方法甚至构造函数,请考虑使用 Spring 驱动的原生 AspectJ 编织,而不是 Spring 的基于代理的 AOP 框架。这就构成了不同特性的AOP使用模式不同,所以在做决定之前一定要先熟悉编织。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    相关资源
    最近更新 更多