探秘 Spring AOP到底是JDK 还是 CGLib动态代理(源码分析)

AOP是为了解耦和提高代码重用性,通过将横切关注点(如日志记录、权限校验)从核心业务中分离。Spring AOP通常使用代理模式实现,它可以基于JDK动态代理或CGLIB。如果目标类实现了接口,Spring默认使用JDK动态代理;否则,使用CGLIB。`@EnableAspectJAutoProxy`注解的`ProxyTargetClass`设置为`true`时,即使目标类有接口,也会使用CGLIB。Spring AOP的实现不依赖AspectJ的编译器,而是利用动态代理技术实现织入。
摘要由CSDN通过智能技术生成

一、什么是AOP?

  • 与OOP相比,面向切面,传统的oop开发中的代码逻辑是至上而下的,在这个过程中 会产生一些横切性的问题,会散落在代码的各个角落中,造成难以维护,耦合度高,aop编程思想就是将这些散落的代码分离出来,独立的封装出来,达到解耦的目的,提高代码的重用性和效率。

  • 在日常的软件开发中,拿日志来说,一个系统软件的开发都是必须进行日志记录的,不然万一系统出现什么bug,你都不知道是哪里出了问题。举个小栗子,当你开发一个登陆功能,你可能需要在用户登陆前后进行权限校验并将校验信息(用户名,密码,请求登陆时间,ip地址等)记录在日志文件中,当用户登录进来之后,当他访问某个其他功能时,也需要进行合法性校验。想想看,当系统非常地庞大,系统中专门进行权限验证的代码是非常多的,而且非常地散乱,我们就想能不能将这些权限校验、日志记录等非业务逻辑功能的部分独立拆分开,并且在系统运行时需要的地方(连接点)进行动态插入运行,不需要的时候就不理,因此AOP是能够解决这种状况的思想吧!
    在这里插入图片描述
    AOP思想的实现一般都是基于 代理模式 ,在JAVA中一般采用JDK动态代理模式,但是我们都知道,JDK动态代理模式只能代理接口而不能代理类。因此,Spring AOP 会这样子来进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值