【八股文】Spring 谈谈你对AOP的理解

AOP

AOP(Aspect-Oriented Programming,面向切面编程):是一种新的方法论,是对传统 OOP(Object-Oriented Programming,面向对象编程)的补充。
面向对象是纵向继承,面向切面是横向抽取。

OOP思想是一种垂直纵向的继承体系,通过子类继承父类可以解决大部分代码重复的问题,但对于一些特殊问题,如在父类所有方法的相同位置进行一些日志控制,OOP便无法解决。

AOP就是解决该类问题,通过一种横向抽取的机制,将那些与业务无关,但对多个对象产生影响的公共行为和逻辑,抽取并放封装成一个可重用的模块。也就是切面,通过将横切逻辑代码与业务代码分离,在不改变原因代码的基础下,将逻辑增强部分应用到原有业务中,从根本上解耦。降低大量重复的操作,降低模块之间的耦合度,提高系统的可维护性。

AOP实现

AOP的实现是基于代理模式的,主要分为静态代理和动态代理

静态代理

静态代理使用AspectJ来实现
属于编译时增强,它会在编译阶段就产生AOP的代理类,并将切面织入到字节码中,运行时的时候就是增强之后的AOP对象,性能比Spring AOP好

动态代理

动态代理则以Spring SOP为代表。
属于运行时增强,AOP框架不会修改字节码,在每次运行时都会在内存中临时为方法生成一个代理对象,这个对象包含了目标对象的所有方法,并且在特定的切点做了增强处理,并回调原有对象的方法。

动态代理主要有两种形式:JDK动态代理和CGLIB动态代码
JDK: 要求代理类实现接口
CGLIB:代理类没有实现接口,在运行时动态生成一个代理对象的子类对象,并覆盖其中特定的方法并增加增强代码,从而实现AOP

在这里插入图片描述

主要应用

安全、日志、参数校验、权限验证、事务、缓存

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值