Administrator
发布于 2024-08-02 / 23 阅读
0
0

@Pointcut 表达式及其意义

@Pointcut 注解在 AspectJ 中用于定义一个切入点,它是一种表达式,用于匹配特定的连接点(通常是方法的执行或对象的构造)。切入点表达式可以基于方法的签名、方法的注解、方法的抛出异常、方法所属的类或包等属性。

以下是一些常见的 @Pointcut 表达式及其意义:

  1. 方法签名: 根据方法的名称、返回类型和参数来匹配方法。

    @Pointcut("execution(* com.example.*.*(..))")
  2. 注解: 匹配被特定注解标记的方法。

    @Pointcut("@annotation(com.example.MyAnnotation)")
  3. 异常抛出: 匹配可能会抛出特定异常类型的方法。

    @Pointcut("execution(* *.*(..)) throws java.io.IOException")
  4. 方法属性: 匹配具有特定属性的方法,例如方法可见性。

    @Pointcut("execution(public * *(..))")
  5. 类和包: 匹配特定类或包下的所有方法。

    @Pointcut("within(com.example.mypackage..*)") // 或者 @Pointcut("within(com.example.MyClass)")
  6. 继承: 匹配继承自特定类的类中的方法。

    @Pointcut("within(com.example.MySuperClass+)")
  7. 实现: 匹配实现了特定接口的类中的方法。

    @Pointcut("within(com.example.MyInterface+)")
  8. 正则表达式: 使用正则表达式匹配方法的签名。

    @Pointcut("execution(* com.example.*..*Method(..))")
  9. 组合: 组合多个切入点表达式。

    @Pointcut("execution(* *.*(..)) && !within(com.example.ExcludedClass)")
  10. 参数匹配: 根据方法参数的类型或注解来匹配方法。

    @Pointcut("execution(* *(..)) && args(java.lang.String, ..)")
  11. 返回类型匹配: 根据方法的返回类型来匹配方法。

    @Pointcut("execution(java.lang.String+ *.*(..))")
  12. this/ target/ args: 匹配方法调用者、被调用对象或参数。

    @Pointcut("this(com.example.MyClass)") // 匹配 this 引用 Myclass 的实例
    @Pointcut("target(com.example.MyClass)") // 匹配目标对象是 Myclass 的实例 
    @Pointcut("args(java.io.Serializable)") // 匹配方法参数中包含 Serializable 类型

@Pointcut 表达式非常灵活,可以单独使用,也可以组合使用,以精确地定义哪些方法或类应该被切面所影响。在实际应用中,这些表达式可以根据需要进行调整,以适应不同的业务场景和需求。


评论