首页 > 其他分享 >Spring AOP

Spring AOP

时间:2024-11-19 17:31:02浏览次数:1  
标签:Spring AOP 切面 通知 方法 AspectJ

单独讲概念,我觉得挺难理解的,至少对于我是这样,哈哈哈,像背八股文一样,尤其是刚学,没有实际开发经验和业务场景的小白。我也是前段时间求职复习,才知道了落下挺多的,通过复习和最近工作中有实际的业务场景去使用才懂。(底层原理是忘了,到时候再更新,哈哈)。写个帖子加深一下印象。

场景:对3个/n个excel模板下载增加sheet页,提供数据给客户填写参考。在3个service层(策略模式)中,都有相同的权限校验和查询相同的数据,我把重复的代码,和主业务不相关的代码(权限校验,公司历史遗留问题了)抽出来,通过切面切入。

下面是举例代码:(实际代码有保密,贴不了)

结合MVC三层架构写的(先学了MVC好理解一点),没像一些教程中单独用spring,xml配置方式和全注解方式去用AOP

写一个自定义注解,放方法上,标记该方法要进行增强

 切面:

在方法上使用注解:

 controller:

结果:

 结合上面说的3个sercice层中的方法,另外两个方法加上这个注解就行了。

总结:减少重复代码,实现代码的复用和解耦,提高代码的可维护性和可扩展性。比如这些场景:日志记录、事务管理、权限控制、接口限流、接口幂等等

下面讲概念

概念:

AOP(Aspect Oriented Programming)即面向切面编程,AOP 是 OOP(面向对象编程)的一种延续,二者互补,并不对立。

AOP 的目的是将横切关注点(如日志记录、事务管理、权限控制、接口限流、接口幂等等)从核心业务逻辑中分离出来,通过动态代理、字节码操作等技术,实现代码的复用和解耦,提高代码的可维护性和可扩展性。

术语:

  • 横切关注点(cross-cutting concerns) :多个类或对象中的公共行为(如日志记录、事务管理、权限控制、接口限流、接口幂等等)。
  • 切面(Aspect):对横切关注点进行封装的类,一个切面是一个类。切面可以定义多个通知,用来实现具体的功能。
  • 连接点(JoinPoint):连接点是方法调用或者方法执行时的某个特定时刻(如方法调用、异常抛出等)。
  • 通知(Advice):通知就是切面在某个连接点要执行的操作。通知有五种类型,分别是前置通知(Before)、后置通知(After)、返回通知(AfterReturning)、异常通知(AfterThrowing)和环绕通知(Around)。前四种通知都是在目标方法的前后执行,而环绕通知可以控制目标方法的执行过程。
  • 切点(Pointcut):一个切点是一个表达式,它用来匹配哪些连接点需要被切面所增强。切点可以通过注解、正则表达式、逻辑运算等方式来定义。比如 execution(* com.xyz.service..*(..))匹配 com.xyz.service 包及其子包下的类或接口。
  • 织入(Weaving):织入是将切面和目标对象连接起来的过程,也就是将通知应用到切点匹配的连接点上。常见的织入时机有两种,分别是编译期织入(Compile-Time Weaving 如:AspectJ)和运行期织入(Runtime Weaving 如:AspectJ、Spring AOP)。

AOP常见通知:

  • Before(前置通知):目标对象的方法调用之前触发,比如上面代码的@Before注解
  • After (后置通知):目标对象的方法调用之后触发
  • AfterReturning(返回通知):目标对象的方法调用完成,在返回结果值之后触发
  • AfterThrowing(异常通知):目标对象的方法运行中抛出 / 触发异常后触发。AfterReturning 和 AfterThrowing 两者互斥。如果方法调用成功无异常,则会有返回值;如果方法抛出了异常,则不会有返回值。
  • Around (环绕通知):编程式控制目标对象的方法调用。环绕通知是所有通知类型中可操作范围最大的一种,因为它可以直接拿到目标对象,以及要执行的方法,所以环绕通知可以任意的在目标对象的方法调用前后搞事,甚至不调用目标对象的方法

AOP实现方式:

AOP 的常见实现方式有动态代理、字节码操作等方式。

Spring AOP 就是基于动态代理的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 Cglib 生成一个被代理对象的子类来作为代理。

也可以使用 AspectJ !Spring AOP 已经集成了 AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。

Spring AOP 属于运行时增强,而 AspectJ 是编译时增强。 Spring AOP 基于代理(Proxying),而 AspectJ 基于字节码操作(Bytecode Manipulation)。

Spring AOP 已经集成了 AspectJ ,AspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。AspectJ 相比于 Spring AOP 功能更加强大,但是 Spring AOP 相对来说更简单,

如果我们的切面比较少,那么两者性能差异不大。但是,当切面太多的话,最好选择 AspectJ ,它比 Spring AOP 快很多。

参考:https://javaguide.cn/system-design/framework/spring/spring-knowledge-and-questions-summary.html

标签:Spring,AOP,切面,通知,方法,AspectJ
From: https://www.cnblogs.com/YancyL/p/18555294

相关文章

  • SpringCloud SaToken整合微服务 集成Redis 网关路由权限拦截 服务间内部调用鉴权
    介绍作为API网关,通常负责路由、负载均衡、安全控制等功能。进行统一鉴权的做法意味着将所有微服务的认证和授权逻辑集中到网关层,而不是每个微服务单独实现。这样做有许多好处,微服务只关心核心业务逻辑,不需要处理身份验证、权限验证等安全问题,减少了开发人员的负担。网......
  • A038-基于SpringBoot的乡村养老服务管理系统登录
    ......
  • Java之Spring MVC篇三
    ​​​​​​​目录响应返回静态页面@RestController和@Controller的区别和联系返回数据@ResponseBody关于@ResponseBody返回HTML代码片段返回JSON设置状态码设置Header设置Content-Type没设置Content-Type之前设置Content-Type之后响应返回静态页面首先......
  • AI 实战篇:Spring-AI再更新!细细讲下Advisors
    在2024年10月8日,SpringAI再次进行了更新,尽管当前版本仍为非稳定版本(1.0.0-M3),但博主将持续关注这些动态,并从流行的智能体视角深入解析其技术底层。目前,SpringAI仍处于小众状态,尚未经过开源社区多年的维护和稳定化过程,这与已经较为成熟的Spring框架形成鲜明对比。即便是SpringAI......
  • 基于Springboot公司考勤管理系统【附源码+文档】
    ......
  • Springboot大学生个人财务管理系统13bek(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学校简介,学生,省钱妙招,收支类型,收入,消费等级,消费预算,借入记录,归还记录,支出开题报告内容一、研究背景随着社会经济的发展和大学教育的普及,大学生经济活......
  • Springboot大学生防诈骗网站设计与开发n0803(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,法规信息,骗局曝光,举报信息,法规类型开题报告内容一、课题背景与意义随着互联网技术的飞速发展,网络诈骗案件频发,大学生作为网络用户的重要群体,由于缺乏足......
  • Springboot大学生防诈骗网站chc9l(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,法律法规,诈骗案例开题报告内容一、课题背景与意义随着互联网技术的飞速发展,网络诈骗案件频发,大学生作为网络用户的重要群体,也频繁成为网络诈骗的受害者。......
  • Springboot创业园员工流动管理平台al084(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,经理,公司信息,部门信息,员工信息,请假信息,薪资信息,社保信息,入职统计,离职统计,请假统计开题报告内容一、研究背景随着创业园的快速发展,员工流动管理成......
  • Spring Boot图书馆管理系统:疫情下的解决方案
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了疫情下图书馆管理系统的开发全过程。通过分析疫情下图书馆管理系统管理的不足,创建了一个计算机管理疫情下图书馆管理系统的方案。文章介绍了疫情下图书馆管理系统的系统分......