【八股文】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. 谈谈Seata理解

    2024-04-23 22:28:04       59 阅读
  2. 谈谈 ES6 理解

    2024-04-23 22:28:04       34 阅读
  3. 谈谈线程安全理解

    2024-04-23 22:28:04       55 阅读
  4. 【面试题】谈谈SpringBoot理解

    2024-04-23 22:28:04       39 阅读
  5. 什么是 RESTful API?谈谈理解

    2024-04-23 22:28:04       27 阅读
  6. 一线大厂面试真题——谈谈ES理解

    2024-04-23 22:28:04       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 22:28:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 22:28:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 22:28:04       87 阅读
  4. Python语言-面向对象

    2024-04-23 22:28:04       96 阅读

热门阅读

  1. Python面试高频题

    2024-04-23 22:28:04       42 阅读
  2. Edge的使用心得与深度探索

    2024-04-23 22:28:04       100 阅读
  3. 利用vue3SeamlessScroll 简单实现列表的无限循环滚动

    2024-04-23 22:28:04       37 阅读
  4. 安卓一键换壁纸

    2024-04-23 22:28:04       31 阅读
  5. Android14 StatusBar顶部图标加载流程

    2024-04-23 22:28:04       26 阅读
  6. Spring Cloud Eureka面试题

    2024-04-23 22:28:04       26 阅读
  7. 【设计模式】观察者模式

    2024-04-23 22:28:04       36 阅读
  8. ecs150 project2 Unix Shell

    2024-04-23 22:28:04       31 阅读
  9. Vue3+Ant Design 父组件调用子组件方法

    2024-04-23 22:28:04       32 阅读