侧边栏壁纸
博主头像
叶落无痕

鸿雁长飞光不度,鱼龙潜跃水成文。

  • 累计撰写 11 篇文章
  • 累计创建 7 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

aop切面编写

yeluo
2024-11-25 / 0 评论 / 0 点赞 / 53 阅读 / 0 字
温馨提示:
本文最后更新于2024-11-25,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

在Spring AOP中,execution()@annotation@within是三种不同的切点表达式(Pointcut Expression),它们用于匹配不同的连接点(join points),以下是它们各自的作用和区别:

1. execution()

execution()是最基本的切入点表达式,用于匹配方法的执行。它可以通过不同的参数来进一步限制要匹配的方法。例如:

execution(* com.example.service.*.*(..)):匹配com.example.service包及其子包中所有公共(public)方法的执行。

execution(public * com.example..*(..)): 匹配com.example包及其子包中所有公共方法的执行。

  execution()表达式可以根据方法的访问权限、返回类型、方法名和参数等信息进行匹配。

2. @annotation

@annotation用于匹配被特定注解标记的方法。它不关心方法是否在某个类中被重写,只关注方法本身是否有注解。例如:

  • @Pointcut("@annotation(com.example.MyAnnotation)"):匹配任何使用com.example.MyAnnotation注解的方法。

 使用@annotation可以帮助开发者拦截所有用特定注解标注的方法,便于实现如日志记录、事务管理等功能。

3. @within

@within用于匹配在具有特定注解的类中声明的方法。不管这些方法是否被子类重写,只要方法最初的声明在带有目标注解的类中,就会被匹配。例如:

  • @Pointcut("@within(org.springframework.stereotype.Repository)"):匹配所有在带有@Repository注解的类中声明的方法。

  与@annotation不同,@within可以匹配到所有在某个类及其子类中声明的方法,而@annotation则只匹配直接被注解的方法。

总结区别:

  • execution() [签名级别] 依据方法的签名(如返回类型、方法名、参数列表等)进行匹配。

  • @annotation [方法级别] 依据方法是否被特定的注解标记进行匹配,不考虑类级别。

  • @within [类级别] 依据方法所在类的注解进行匹配,关注类级别,包括类及其子类中所有被声明的方法。

选择合适的切入点表达式取决于你希望如何定义和匹配连接点,不同的表达式提供不同的灵活性和功能。

0

评论区