面试常客:谈谈你对AOP的理解

AOP:Aspect oriented programming 面向切面编程,是 OOP 的一种延续、补充

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

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

实现

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

静态代理使用 AspectJ 来实现,动态代理则以 Spring AOP 为代表

AspectJ 与 Spring AOP 的区别

  • AspectJ:它属于编译时增强,它会在编译阶段就生成 AOP 的代理类,并将切面织入到字节码中,运行的时候就是增强之后的 AOP 对象,性能比 Spring AOP 好
  • Spring AOP:它属于运行时增强,AOP 框架不会修改字节码,在每次运行时都会在内存中临时为方法生成一个代理对象,这个对象包含了目标对象的所有方法,并且在特定的切点做了增强处理,并回调原对象的方法

动态代理中主要有两种形式:JDK 动态代理和 CGLIB 动态代理

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

主要应用

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

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值