前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring AOP五大通知&配置

Spring AOP五大通知&配置

作者头像
名字是乱打的
发布2022-05-13 12:51:13
3000
发布2022-05-13 12:51:13
举报
文章被收录于专栏:软件工程

软件工程有种思想叫关注点分离:不同的问题交给不同的部分去解决

  • 面向切面编程AOP正是此种技术的体现
  • 通用化功能代码的实现,对应的就是所谓的切面(Aspect)
  • 业务功能代码和切面代码分开后,架构将变得高内聚低耦合
  • 确保功能的完整性:切面最终需要被合并到业务中(Weave)专业术语---织入
AOP的三种织入方式
  • 编译时织入:需要特殊的Java编译器,如AspectJ
  • 类加载时织入:需要特殊的Java编译器,如Aspect]和AspectWerkz
  • 运行时织入:Spring采用的方式,通过动态代理的方式,实现简单
AOP只要解决W(what) W(where) W(when)即可
  • what:即切面Aspect:通用功能的代码实现
  • where:即切入点,where的织入发生在哪里
  • when:什么时候织入

1.前置通知 在目标方法执行之前执行执行的通知。 前置通知方法,可以没有参数,也可以额外接收一个JoinPoint,Spring会自动将该对象传入,代表当前的连接点,通过该对象可以获取目标对象 和 目标方法相关的信息。 注意,如果接收JoinPoint,必须保证其为方法的第一个参数,否则报错。

2.后置通知 在目标方法执行之后执行的通知。 在后置通知中也可以选择性的接收一个JoinPoint来获取连接点的额外信息,但是这个参数必须处在参数列表的第一个。

3.环绕通知 在目标方法执行之前和之后都可以执行额外代码的通知。 在环绕通知中必须显式的调用目标方法,目标方法才会执行,这个显式调用时通过ProceedingJoinPoint来实现的,可以在环绕通知中接收一个此类型的形参,spring容器会自动将该对象传入,注意这个参数必须处在环绕通知的第一个形参位置。 **要注意,只有环绕通知可以接收ProceedingJoinPoint,而其他通知只能接收JoinPoint。 环绕通知需要返回返回值,否则真正调用者将拿不到返回值,只能得到一个null。 环绕通知有控制目标方法是否执行、有控制是否返回值、有改变返回值的能力。 环绕通知虽然有这样的能力,但一定要慎用,不是技术上不可行,而是要小心不要破坏了软件分层的“高内聚 低耦合”的目标。

4.异常通知 在目标方法抛出异常时执行的通知 可以配置传入JoinPoint获取目标对象和目标方法相关信息,但必须处在参数列表第一位,另外,还可以配置参数,让异常通知可以接收到目标方法抛出的异常对象。 .最终通知是在目标方法执行之后执行的通知。和后置通知不同之处在于,后置通知是在方法正常返回后执行的通知,如果方法没有正常返-例如抛出异常,则后置通知不会执行。 而最终通知无论如何都会在目标方法调用过后执行,即使目标方法没有正常的执行完成。 另外,后置通知可以通过配置得到返回值,而最终通知无法得到。 最终通知也可以额外接收一个JoinPoint参数,来获取目标对象和目标方法相关信息,但一定要保证必须是第一个参数。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • AOP的三种织入方式
  • AOP只要解决W(what) W(where) W(when)即可
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档