SSM相关问题-3-什么是AOP?--AOP的实现原理是什么---SpringMvc的执行流程

简介: AOP(面向切面编程)是一种编程范式,旨在将横切关注点(如日志、事务管理)从业务逻辑中分离,提升代码模块化与可维护性。其核心包括切面、通知、切入点等概念,通过动态代理(如JDK、CGLIB)实现,增强代码灵活性与复用性。

Q:什么是AOP

概念:AOP既面向切象编程。是一种编程范式,主要用于将横切关注点从业务逻辑中脱离出来,以此来提高代码的模块化,和可维护性。

核心概念:

  1. 横切关注点(Cross-Cutting Concerns):多个模块中重复出现的与业务逻辑无关但又必须使用的代码,如日志记录,事务管理,权限校验
  2. 切面(Aspect):用于封装横切关注点的类。并且被 @Aspect 注释。如:日志切面主要负责在方法前后添加日志记录。
  3. 通知(Advice):切面在特定切入点中执行的代码。有以下类型
  1. 前置通知(Before):方法执行前
  2. 后置通知(After):方法执行后(无论是否异常)
  3. 返回通知(After Returning):方法正常返回后
  4. 异常通知(After Throwing):方法抛出异常后
  5. 环绕通知(Around):包围方法执行,可自定义执行时机
  1. 切入点(Pointcut):定义通知应该在哪些连接点(方法)上执行,通常表达式(如 AspectJ 语法)execution(* com.example.service.*.*(..)) 匹配所有服务层方法。
  2. 连接点(Join Point):程序执行过程中的特定点(如方法调用,异常抛出),是切入点的候选位置
  3. 织入(Weaving):将切面逻辑切入到目标对象的过程
  1. 编译时:如AspectJ的ajc编译器
  2. 类加载时:如使用类加载器增强


AOP的实现原理是什么

AOP(面向切面编程)的实现原理主要是动态代理。

AOP的动态代理有俩种JDK代理和CGLIB代理


1.JDK动态代理

原理:基于Java反射机制,在运行时创建目标接口的代理类,拦截方法调用并织入切面逻辑

优缺点:
  • 纯java实现,无需额外的依赖
  • 轻量级,运行时生成代理类速度快
  • (缺点)仅支持接口,目标类必须至少实现一个接口
2.CGLIB代理

原理:通过继承子类,运行时生成子类,重写目标方法以织入切面逻辑

优缺点:

  • 支持类代理,无需目标类实现接口
  • final/方法不支持,无法代理有final修饰的类或方法
  • 性能开销,生成代理类的速度低于JDK动态代理


Q:SpringMvc的执行流程

客户端通过url发送一个HTTP请求,SpringMvc的前端控制器DispatcherServlet会接收这个请求并调用HandlerMapper(映射器)来进行映射,返回一个HandlerExecutionChain(处理程序执行链)(包含处理器对象(Controller)和拦截器).前端控制器拿到这个执行链后会通过HandlerApdater(额打不特)(处理器适配器)的分析找到对应的控制器Controller。控制器执行完URL对应的方法中的逻辑后会返回一个ModelAndView。前端控制器接收到这个对象后又会调用视图解析器(ViewResolver)来解析视图对象。最后前端控制器将模型数据传递给视图对象后,渲染出HTML页面再由前端控制器返回给客户端



目录
相关文章
|
5月前
|
人工智能 测试技术 数据库
企业数字化如何避免智能体设计陷入‘技术堆砌’的陷阱,真正做到以业务为导向?
本文AI产品专家三桥君探讨了如何以业务为导向设计智能体系统,避免陷入技术堆砌陷阱。通过电信运营商套餐推荐场景,提出从需求分析、多智能体协同设计到开发落地的完整方法论。三桥君强调技术需服务于业务本质,为AI智能体落地提供系统性实践路径。
224 0
|
Java 容器
如何在SpringBoot项目中使用过滤器和拦截器
过滤器和拦截器是日常开发中常用技术,用于对特定请求进行增强处理,如插入自定义代码以实现特定功能。过滤器在请求到达 `servlet` 前执行,而拦截器在请求到达 `servlet` 后执行。`SpringBoot` 中的拦截器依赖于 `SpringBoot` 容器,过滤器则由 `servlet` 提供。通过实现 `Filter` 接口并重写 `doFilter()` 方法可实现过滤器;通过实现 `HandlerInterceptor` 接口并重写相应方法可实现拦截器。两者的主要区别在于执行时机的不同,需根据具体场景选择使用。
774 4
如何在SpringBoot项目中使用过滤器和拦截器
|
Kubernetes Cloud Native Java
Activiti 简介以及最新activiti依赖 pom.xml文件(使用时注意对应版本号)
Activiti 简介以及最新activiti依赖 pom.xml文件(使用时注意对应版本号)
860 2
|
Java Maven Spring
Maven高级-属性配置使用、资源文件引用属性及版本管理
Maven高级-属性配置使用、资源文件引用属性及版本管理
270 0
|
消息中间件 Kafka RocketMQ
Kafka重平衡机制
当集群中有新成员加入,或者某些主题增加了分区之后,消费者是怎么进行重新分配分区再进行消费的?这里就涉及到重平衡(Rebalance)的概念,下面我就给大家讲解一下什么是 Kafka 重平衡机制,我尽量做到图文并茂通俗易懂。
1931 0
Kafka重平衡机制
|
Java Spring 容器
Spring IOC、AOP与事务管理底层原理及源码解析
【10月更文挑战第1天】Spring框架以其强大的控制反转(IOC)和面向切面编程(AOP)功能,成为Java企业级开发中的首选框架。本文将深入探讨Spring IOC和AOP的底层原理,并通过源码解析来揭示其实现机制。同时,我们还将探讨Spring事务管理的核心原理,并给出相应的源码示例。
396 9
|
缓存 JavaScript Java
常见java OOM异常分析排查思路分析
Java虚拟机(JVM)遇到 OutOfMemoryError(OOM)表示内存资源不足。常见OOM情况包括:1) **Java堆空间不足**:内存被大量对象占用且未及时回收,或内存泄漏;解决方法包括调整JVM堆内存大小、优化代码及修复内存泄漏。2) **线程栈空间不足**:单线程栈帧过大或频繁创建线程;可通过优化代码或调整-Xss参数解决。3) **方法区溢出**:运行时生成大量类导致方法区满载;需调整元空间大小或优化类加载机制。4) **本机内存不足**:JNI调用或内存泄漏引起;需检查并优化本机代码。5) **GC造成的内存不足**:频繁GC但效果不佳;需优化JVM参数、代码及垃圾回收器
826 7
常见java OOM异常分析排查思路分析
|
Java 测试技术 Spring
SpringBoot配置加载顺序
SpringBoot配置加载顺序
1221 0
java使用AOP切面获取请求日志并记录
java使用AOP切面获取请求日志并记录
|
SQL 关系型数据库 MySQL
MySQL Online DDL原理解读
MySQL Online DDL原理解读
374 3