什么是AOP?

简介: AOP(面向切面编程)是Spring框架的重要特性,用于将日志、事务、权限等公共逻辑抽离,实现模块复用、降低耦合。项目中常用AOP记录操作日志和权限控制,通过自定义@Log注解结合环绕通知,捕获方法执行信息并存入数据库,便于追踪核心业务操作。其底层基于动态代理实现。

aop是面向切面编程,在spring中用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取公共模块复用,降低耦合,一般像系统的公共日志记录,事务处理,权限的控制等都可以通过AOP来实现。
可能继续追问的问题:
1).你们项目中有没有使用到AOP?
这个很多地方都用到了,比如我们当时在后台管理系统中,就是使用aop来记录了系统的操作日志、以及权限控制。那就来说一下,记录日志的操作思路吧。
主要思路是这样的,使用aop中的环绕通知 加上基于注解@annotation 的切点表达式来实现的。
首先,自定义了一个注解,比如叫 @Log,然后哪些操作需要记录日志,我们就在哪些方法上加上这个注
解。然后再定义一个切面类,通过环绕通知,来获取原始方法在运行的各项信息,比如:类信息、方法信息、注解、请求方式、请求参数、当前操作人、操作时间、返回值等信息,全部记录下来,保存在数据库中。当时,我们主要记录的是一些核心业务模块的增删改的操作日志,主要便于数据追踪。2).AOP的底层是如何实现的?
SpringAOP的底层主要是通过动态代理技术实现的,主要是两种代理技术。一种是JDK的动态代理,而IDK的动态代理呢,有限制,只能针对于实现了接口的类做代理,所以,在spring中还有一种是Cglib动态代理,那Cglib动态代理呢,就没有这个限制。
3).JDK动态代理 与 Cglib动态代理有什么区别呢?
限制不同。JDK动态代理,要求被代理对象必须实现了接口才可以。而Cglib动态代理,无论是否实现接口都可以(只要类不是final修饰即可)。
代理对象不同。JDK动态代理生成的代理对象,与被代理对象其实是实现了相同的接口,可以说是兄弟关系。而Cglib动态代理生成的代理对象,其实是继承了被代理类,是基于继承体系的,所以是父子关系。也正是因为此,所以Cglib不能为被final修饰的类做代理

相关文章
|
10天前
|
缓存 监控 网络协议
如何让 IPv6 站支持 IPv4/IPv6 访问
D-NET 是一款轻量级开源工具,助力家庭部署的 IPv6 站点实现 IPv4/IPv6 双栈访问。通过对接阿里云、百度智能云 CDN,自动同步动态 IPv6 地址,解决运营商封端口、地址变动等问题。支持未备案域名(阿里云全球加速)与已备案域名(推荐百度云),低成本、高效率搭建稳定可访问的个人站点,适用于 NAS、博客、Home Assistant 等多种场景。
175 0
如何让 IPv6 站支持 IPv4/IPv6 访问
|
5天前
|
人工智能 供应链 监控
站在岔路口的1688商家,是观望,还是在新赛道中寻找机会?
1688商家正面临流量下滑的严峻挑战,平台转型、算法升级与外部竞争加剧使传统运营模式难以为继。面对困境,主动求变才是出路:通过内容化转型、直播短视频、数据驱动和私域沉淀等新策略,提升数字化能力与客户价值。唯有创新升级,才能穿越周期,赢得未来。
|
移动开发 JavaScript Oracle
Oracle根据汉字取拼音首字母的function
Oracle根据汉字取拼音首字母的function
8293 0
|
人工智能 安全 算法
AI战略丨协同共治,应对 AI 时代安全新挑战
人工智能行业的安全发展,需要整个行业“产学研用”等多方协同共治,才能实现人工智能的高质量发展目标。
|
9月前
|
存储 运维 监控
百万指标,秒级查询,零宕机——时序数据库 TDengine 在 AIOps 中的硬核实战
本篇文章详细讲述了七云团队在运维平台中如何利用 TDengine 解决海量时序数据存储与查询的实际业务需求。内容涵盖了从数据库选型、方案落地到业务挑战及解决办法的完整过程,特别是分享了升级 TDengine 3.x 时的实战经验,给到有需要的小伙伴参考阅读。
353 1
|
存储 开发框架 关系型数据库
Python Web开发
Python Web开发
|
11月前
|
编解码 人工智能 算法
国家扶持超高清产业背景下:视频云AIGC的超高清技术实践
本次分享由阿里云视频云高级产品解决方案架构师陈震主讲,聚焦国家扶持超高清产业背景下,视频云AIGC的超高清技术实践。内容涵盖超高清产业发展趋势与挑战、阿里视频云的应对方案及应用案例。通过全链路超高清解决方案,结合AI、云计算等技术,提供从内容生产、传输到播放的完整支持,助力行业应对超高清视频带来的技术与市场挑战。
440 0
|
存储 供应链 数据挖掘
RDBMS技术有哪些应用场景
【10月更文挑战第21】RDBMS技术有哪些应用场景
390 2
|
算法 前端开发 Linux
深入理解Linux内核调度器:CFS与实时性的平衡####
本文旨在探讨Linux操作系统的核心组件之一——完全公平调度器(CFS)的工作原理,分析其在多任务处理环境中如何实现进程间的公平调度,并进一步讨论Linux对于实时性需求的支持策略。不同于传统摘要仅概述内容要点,本部分将简要预览CFS的设计哲学、核心算法以及它是如何通过红黑树数据结构来维护进程执行顺序,同时触及Linux内核为满足不同应用场景下的实时性要求而做出的权衡与优化。 ####
|
存储 NoSQL 中间件
软件体系结构 - 数据分片
【4月更文挑战第20天】软件体系结构 - 数据分片
547 15