spring aop原理

article/2025/9/18 10:44:15

🍅 Java学习路线:搬砖工逆袭Java架构师

🍅 简介:Java领域优质创作者🏆、CSDN哪吒公众号作者✌ 、Java架构师奋斗者💪

🍅 扫描主页左侧二维码,加入群聊,一起学习、一起进步 

🍅 欢迎点赞 👍 收藏 ⭐留言 📝  

最近进行了一波面试,面试官问我项目中AOP的具体应用,面试的时候我只知道AOP是面向切面编程,动态代理方式实现的,可以用在登录验证、事务和日志上,但具体代码怎么写的,说的那真的是云里雾里,回家猛补了一下AOP。

一、AOP的基本概念

1、什么是AOP?

AOP(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等等,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。

在不改变原有逻辑的基础上,增加了一些额外的功能。代理也是这个功能,读写分离也是用AOP来实现的。

2、AOP与OOP

AOP可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。OOP引入封装、继承、多态等概念来建立一种对象层次结构,用于模拟公共行为的一个集合。不过OOP允许开发者定义纵向的关系,但并不适合定义横向的关系,例如日志功能。日志代码往往横向地散布在所有对象层次中,而与它对应的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理和透明的持续性也都是如此,这种散布在各处的无关的代码被称为横切(cross cutting),在OOP设计中,它导致了大量代码的重复,而不利于各个模块的重用。

3、AOP

AOP技术恰恰相反,它利用一种称为“切面”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用的模块,并将其命名为“Aspect”,即切面。所谓“切面”,简单说就是那些与业务无关,却被业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

使用“横切”技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多出,而各处基本相似,比如权限认证、日志、事务。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

二、AOP的相关概念

1、横切关注点

对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点;

2、Aspect(切面)

通常是一个类,里面可以定义切入点和通知。

3、JoinPoint(连接点)

程序执行过程中明确的点,一般是方法的调用,被拦截到的点。因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器。

4、Advice(通知)

AOP在特定的切入点上执行的增强处理,有before(前置)、after(后置)、afterReturning(最终)、afterThrowing(异常)、around(环绕)。

5、Pointcut(切入点)

带有通知的连接点,在程序中主要体现在书写切入点表达式。

6、weave(织入)

将切面应用到目标对象并导致代理对象创建的过程。

7、introduction(引入)

在不修改代码的前提下,引入可以在运行期为类动态地增加一些方法或字段。

8、AOP代理(AOP Proxy)

AOP框架创建的对象,代理就是目标对象的加强。Spring中的AOP代理可以是JDK动态代理,也可以是CGLIB代理,前者基于接口,后者基于子类。

9、目标对象(Target Object)

包含连接点的对象,也被称作被通知或被代理对象,POJO。

三、Advice通知类型介绍

1、@Before

在目标方法被调用之前做增强处理,@Before只需要指定切入点表达式即可。

2、@After

在目标方法完成之后做增强,无论目标方法是否成功完成,@After可以指定一个切入点表达式。

3、@AfterReturning

在目标方法正常完成后做增强,@AfterReturning除了指定切入点表达式外,还可以指定一个返回值形参名returning,代表目标方法的返回值。

4、@AfterThrowing

主要用来处理程序中未处理的异常,@AfterThrowing除了指定切入点表达式外,还可以指定一个throwing的返回值形参名,可以通过该形参名来访问目标方法中所抛出的异常对象。

5、@Around

环绕通知,在目标方法完成前后做增强处理,环绕通知是最重要的通知类型,像事务、日志等都是环绕通知,注意编程中的核心ProceedingJoinPoint。

四、AOP的使用场景

1、Authentication 权限

2、Caching 缓存

3、Context passing 内容传递

4、Error handling 错误处理

5、Lazy loading 懒加载

6、Debugging  调试

7、logging, tracing, profiling and monitoring 记录跟踪 优化 校准

8、Performance optimization 性能优化

9、Persistence  持久化

10、Resource pooling 资源池

11、Synchronization 同步

12、Transactions 事务

今天就先到这吧,以后回来重构!

前一篇: 如果当时这12道题能答好,现在应该已经被录取了(记一次面试的亲身经历 2020-7-14)

后一篇:【全栈最全Java框架总结】SSH、SSM、Springboot


http://chatgpt.dhexx.cn/article/LJKBxsGd.shtml

相关文章

AOP原理

AOP原理 什么是AopAOP的作用AOP的基本概念AOP使用场景AOP原理如何动态修改功能AOP的编程思想AOP面向切面编程操作AOP通知执行的顺序代码执行流程准备工作源码揭开面纱 什么是Aop AOP(Aspect Orient Programming)也就是面向切面编程,作为面向对…

无法显示页面,因为发生内部服务器错误。

用iis添加网站后,访问域名,显示“无法显示页面,因为发生内部服务器错误。” 之前我将这些文件放在一个Demo文件夹中,把Demo放在test站点下,通过域名访问Demo报错。 我将Demo下的文件直接放在test下,访问成…

遇到“服务器内部错误http500怎么办?

出现500错误的原因是很多的,一般来说都是程序错误导致的,如果程序出错,那么在浏览器内会返回给用户一个友好的错误提示,统一称之为服务器500错误。 解决的方法就是您必须在http中能够正确的获得错误信息,方法为&#x…

500 - 内部服务器错误--解决方案

一般网上的方法是这样的: 一、打开 Internet 信息服务(IIS)管理器。点击出错的站点,并双击右边的ASP图标,如下图所示: 二、展开右侧配置中的“调试属性”,把“将错误发送到浏览器”的值设为 "true"&#xf…

HTTP状态 500 - 内部服务器错误 类型 异常报告,初学servlet遇到的问题

写给自己看,初学记录一下,maven项目中tomcat,Servlet遇到的问题 HTTP状态 500 - 内部服务器错误 类型 异常报告,初学servlet遇到的问题 类似这种报错,在hello world级别的servlet中碰到。 报错分析 大概是说自定义java类在实例…

IIS 配置网站出现500内部服务器错误,显示具体错误信息

1、打开IIS 找到如下图的部分,双击点开 2、点开之后找到如下图部分,点击 3、选择如下图部分,然后点击确定。 4、这个时候页面会出现详细的错误,如果没有出现详细错误,配置如下图部分,不勾选。 5、这时会出现…

Nextcloud 内部服务器错误解决

在部署nextcloud过程中最后登录页面时出现内部服务器错误,心态当时就炸了。 在网上找了各种方案,但是大部分博主都告诉我是/var/lib/php/session/属组的权限问题,或者web目录的权限不对。但是对我这个问题没有用。 我把他们的方案贴出来对你…

IDEA中HTTP500 - 内部服务器错误类型 在 [] 行处理 [/.jsp] 时发生异常情况;java.lang.NoSuchMethodError: com.Bean.Person.setId

问题: HTTP状态 500 - 内部服务器错误 类型 异常报告 消息 在 [65] 行处理 [/pages/el 5/elDataDemo2.jsp] 时发生异常 描述 服务器遇到一个意外的情况,阻止它完成请求。 例外情况 org.apache.jasper.JasperException: 在 [65] 行处理 [/pages/el 5/elDa…

HTTP状态 500 - 内部服务器错误:No converter found for return value of type: class xxx(简单分析及解决)

问题描述 以下内容基于ssm框架,当我们向tomcat服务器发起请求时,出现如下的错误状态提示–500。 Tomcat日志信息: 原因分析: 未找到类型返回值的转换器:类 com.ssm.utils.Msg,使用jackson绑定数据时出现…

阿里云服务器出错500 - 内部服务器错误

阿里云服务器部署并发布成功后,访问该网页时出错,报 500 - 内部服务器错误。 原因:1.http 500内部服务器错误说明IIS服务器无法解析ASP代码,如果你联网还发现找不到服务器就是500错误了. 2.在安装Framework v4.0之后&#xff0c…

HTTP 500 - Internal Server Error 服务器内部错误

php出现如下错误 原因是出现了中文字符 修改后,页面成功访问

500错误及服务器内部错误

500错误及服务器请求错误 一、简言:500错误代表着你请求的后端或者说服务器端出现了错误。 可能的原因非常多,因为很多程序内部都会把代码运行出现的错误捕捉然后直接返回一个“服务器内部错误500”,这也就导致了我们在前端发送请求时见到的…

远程服务器返回错误: (500) 内部服务器错误解决办法

在.net中发送 xml post请求和接受xml 的post请求时,经常会遇到“远程服务器返回错误: (500) 内部服务器错误”。 这里有2种解决办法: 第一种方法:修改请求端Content-Type 为“text/xml”(httpclient.Headers.Add("Content-Type",…

服务器错误500-内部服务器错误。您查找的资源存在问题,因而无法显示。

当我们用iis环境搭建的网站出现了服务器错误500错误时我们该怎么处理呢,小编的网站织梦网站就出现了服务器错误 500 - 内部服务器错误。 您查找的资源存在问题,因而无法显示这个问题,如下图所示。织梦网站后台登陆前台预览都是正常的&#x…

什么是HTTP 500内部服务器错误,要怎么修复

HTTP 500是一种原始的错误代码,它指示网站服务器在处理请求时发生了内部错误,不过具体错误原因是不确定的。一般情况下,这种错误通常是由服务器程序上的bug或者配置问题造成的。当服务器收到请求时,尝试执行它时,但是发…

HTTP状态500-内部服务器错误

SSM整合时出现的问题 起初关注点一直在Mapper.xml上,CSDN查询解决方法大致在这样几种。 1.SQL语句问题 2.resultType返回类型问题(List集合中的参数类型) 3.database.properties数据库配置文件问题(Mysql8以上加时区,文…

Java问题解决:HTTP状态 500 - 内部服务器错误 Servlet[SpringMVC]的Servlet.init()引发异常

问题: 在学习11_尚硅谷_SpringMVC_HelloWorld 课程中部署SpringMVC项目时遇到如下问题: HTTP状态 500 - 内部服务器错误 类型 异常报告消息 Servlet[SpringMVC]的Servlet.init()引发异常描述 服务器遇到一个意外的情况&#xff0…

“500 - 内部服务器错误。”解决办法

建站时遇到如下页面错误: 解决办法: 打开计算机管理IIS后,展开网站,点击出现错误的具体网站->"高级设置"->"物理路径凭据", 在弹出的对话框中查看路径凭据是不是选择在"特定用户",如果是请改…

【Python面向对象】封装、继承、多态

面向对象有三个基本特征,分别是封装、继承和多态。其中,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目…

浅谈对于封装、继承与多态的理解(Java)

目录 封装 继承 父类成员的访问 如何在子类中访问父类同名的成员 子类构造方法 代码块在继承上的执行顺序 多态 多态的实现条件 重写 多态的优缺点 面向对象程序的三大特征:封装继承和多态。 封装 封装:将数据和操作数据的方法进行有效…