当前位置: 首页 > 知识库问答 >
问题:

Spring AOP Poincut表达式

郑帅
2023-03-14
<aop:config>
    <aop:pointcut id="allCalls" expression="within(com.xmy.package..*)" />
    <aop:aspect ref="loggingService">
        <aop:around method="logMethodFlow" pointcut-ref="allCalls" />
    </aop:aspect>
</aop:config>

但是当我为一个特定的类使用切入点表达式时(如下所示),它工作得很好。

<aop:config>
    <aop:pointcut id="classCalls" expression="execution(* com.xmy.package.MyClass.*(..))" />
    <aop:aspect ref="loggingService">
        <aop:around method="logMethodFlow" pointcut-ref="classCalls" />
    </aop:aspect>
</aop:config>

请让我知道如何记录对特定包及其子包的所有方法调用。

共有1个答案

殳凯捷
2023-03-14

特定包及其子包中的所有方法调用的点切。例如com.xmy.package1.subpackages...com.xmy.package2.subpackages...

<aop:config>
    <aop:pointcut id="pkg1AllCalls" expression="execution (* com.xmy.package1+*())" />
    <aop:pointcut id="pkg2AllCalls" expression="execution (* com.xmy.package2+*())" />
    <aop:aspect ref="loggingService">
        <aop:around method="logMethodFlow" pointcut-ref="pkg1AllCalls" />
        <aop:around method="someOtherMethod" pointcut-ref="pkg2AllCalls" />
    </aop:aspect>
</aop:config>

即定义两个不同的切入点,使表达式既简洁又可维护。注意someothermethod()是我添加的新内容,用于使用两个不同的切入点。

如果必须合并两个切入点,那么基于XML的样式会有一个限制,如Spring Docs3.0的参考:6.4.2部分所示

@Pointcut(execution(* get*()))
  public void propertyAccess() {}

  @Pointcut(execution(org.xyz.Account+ *(..))
  public void operationReturningAnAccount() {}

  @Pointcut(propertyAccess() && operationReturningAnAccount())
  public void accountPropertyAccess() {}
 类似资料:
  • 问题内容: 有没有办法让AngularJS在模型数据中评估表达式? HTML: 模型: 最终结果将是:。 问题答案: 您可以使用该服务来插值字符串… JSFiddle

  • 算术运算符 Lua 的算术运算符如下表所示: 算术运算符 说明 + 加法 - 减法 * 乘法 / 除法 ^ 指数 % 取模 示例代码:test1.lua print(1 + 2) -->打印 3 print(5 / 10) -->打印 0.5。 这是Lua不同于c语言的 print(5.0 / 10) -->打印 0.5。 浮点数相除的结果是浮点数 -- print(1

  • 和其他计算机语言一样,MATLAB也有数学表达式。但与多数计算机语言不同的是,MATLAB的表达式是针对矩阵的。表达式有以下构成: 变量 数 算子 函数

  • Rust 程序(大部分)由一系列语句构成: fn main() { // 语句 // 语句 // 语句 } Rust 有多种语句。最普遍的语句类型有两种:一种是绑定变量,另一种是表达式带上分号: fn main() { // 变量绑定 let x = 5; // 表达式; x; x + 1; 15; } 代码块也是表达式,所以

  • 一、常用表达式: 和大多数关系型数据库一样,SQLite能够很好的支持SQL标准中提供的表达式,其函数也与SQL标准保持一致,如: || * / % + - << >> & | < <= > >= = == != <> IS IS NOT IN LIKE AND OR ~ NOT 在上面的表达式中,唯一需要

  • 在 Swift 中,有四种类型的表达式:前缀表达式,二元表达式, 基本表达式和后缀表达式。计算表达式会返回值、导致副作用,或者二者都有。 前缀表达式和二元表达式允许你给简单表达式应用各种运算符。基本表达式是概念上最简单的表达式种类,它们提供了一种访问值的方法。后缀表达式,如前缀表达式和二元表达式一般,后缀允许你建立更复杂的表达式,例如函数调用和成员访问。下面的章节中会详细介绍每种表达式。 GRAM

  • 本页包含内容: 前缀表达式(Prefix Expressions) 二元表达式(Binary Expressions) 赋值表达式(Assignment Operator) 三元条件运算符(Ternary Conditional Operator) 类型转换运算符(Type-Casting Operators) 主要表达式(Primary Expressions) 后缀表达式(Postfix Ex

  • 当需要给插值或者指令参数提供值时,可以使用变量或其他复杂的表达式。 例如,我们设x为8,y为5,那么 (x + y)/2 的值就会被处理成数字类型的值6.5。 在我们展开细节之前,先来看一些具体的例子: 当给插值提供值时:插值的使用方式为 ${expression}, 把它放到你想输出文本的位置上,然后给值就可以打印出来了。 即 ${(5 + 8)/2} 会打印出 ''6.5'' 来 (如果输出的