首页 > 其他分享 >IoC&AOP详解

IoC&AOP详解

时间:2024-08-31 21:26:56浏览次数:11  
标签:事务管理 通知 详解 切面 AOP IoC 限流

1.IoC

1.1 什么是IoC

        IoC即控制反转/反转控制。它是一种思想而不是一种技术实现,描述的是:Java开发领域对象的创建以及管理的问题

        例如: 现有类A依赖类B

                传统开发方式:在类A中通过new关键字来创建一个类B的对象

                IoC开发方式: 通过IoC容器(Spring框架)来获取某个实例化对象

1.2 控制反转

        控制:指的是对象创建(实例化,管理)的权力

        反转:将该权利转让给外部容器

1.3 作用

        1. 对象之间的耦合度降低

        2. 资源管理变得便利

1.4 IoC和DI有什么区别

        DI指的是依赖注入,而依赖注入是IoC最常见的实现方法。

        正所谓IoC是一种开发思想,而不是技术实现,在Spring中IoC容器实际上就是通过一个Map来存放各种对象。

2.AOP

2.1 什么是AOP

        AOP指的是面向切面编程,是OOP(面向对象编程)的一种延续,二者互补而不冲突。

        AOP的目的是将横切关注点(如日志记录、事务管理、权限控制、接口限流、接口幂等等)从核心业务逻辑中分离出来,通过动态代理、字节码操作等技术,实现代码的复用和解耦,提高代码的可维护性和可扩展性。

        OOP的目的是将业务逻辑按照对象的属性和行为进行封装,通过类、对象、继承、多态等概念,实现代码的模块化和层次化,提高代码的可读性和可维护性。

2.1 为什么叫面向切面编程

        AOP的核心思想就是将横切关注点从核心业务逻辑中分离出来,形成一个个的切面。

        AOP的关键术语:

        横切关注点:多个类或对象中的公共行为(如日志记录,事务管理,权限控制,接口限流等)。

        切面:对横切关注点进行封装的类,一个切面是一个类。切面可以定义多个通知,用来实现具体的功能。

        连接点:连接点是方法调用或者方法执行时的某个特定时刻(方法调用,异常抛出等)。

        通知:通知就是切面在某个连接点要执行的操作。通知有五个类型:前置通知,后置通知,异常通知,返回通知,环绕通知。前四种通知都是在方法的前后执行,而环绕通知可以控制方法的执行过程

        切点:一个切点时一个表达式,它用来匹配哪些连接点需要被切面所增强,切点可以通过注解,正则表达式,逻辑运算等方式定义,如execution(*com.x.service..*(..)匹配com.x.service包及其子包下的类或接口。

        织入:织入是切面和目标对象连接起来的过程,也就是通知应用到切点匹配的连接点上,常见的织入点有两种:一是编译期织入,二是运行时织入

2.3 AOP解决了什么问题

        OOP不能很好解决分散在多个类或对象中的公共行为(例如:日志记录,事务管理,权限控制等),这些公共行为通常称为横切关注点,而AOP能够将横切关注点从核心代码中分离出来,实现关注点的分离。

2.4 AOP的应用场景

        1.日志记录:自定义日志记录注解,利用AOP,一行代码即可实现日志记录。

        2.性能统计:利用AOP在目标方法的执行前后统计方法的执行时间,方便优化和分析。

        3.事务管理:@Transactional注解可以让Spring为我们进行事务管理,比如回滚异常操作,免去了重复事务管理逻辑,而@Transactional注解就是基于AOP实现的。

        4.权限控制:利用AOP在目标方法执行前判断用户是否具备所需要的权限,如果具备,就执行,否则不执行。例如SpringSecurity利用@PreAuthorize注解自定义权限校验

        5.接口限流:利用AOP在目标方法执行前通过具体的限流算法和实现请求进行限流处理。

        6.缓存管理:利用AOP在目标方法执行前后进行缓存的读取和更新

2.5 AOP的实现方法

        1.动态代理

        2.字节码操作

        3. AspectJ,AOP已经整合了 AspectJAspectJ 应该算的上是 Java 生态系统中最完整的 AOP 框架了。

        Spring AOP 属于运行时增强,而 AspectJ 是编译时增强。 Spring AOP 基于代理(Proxying),而 AspectJ 基于字节码操作(Bytecode Manipulation)。

标签:事务管理,通知,详解,切面,AOP,IoC,限流
From: https://blog.csdn.net/qq_53429120/article/details/141758301

相关文章

  • MVCC详解
    1.概念1.1什么是MVCCMVCC,全称Multi-VersionConcurrencyControl,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC在MySQLInnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-......
  • 集合及数据结构第十二节(上)———— 二叉搜索树和Map、Set详解
    系列文章目录集合及数据结构第十二节(上)————二叉搜索树和Map、Set详解二叉搜索树和Map、Set详解搜索树的概念二叉搜索树的实现性能分析和java类集的关系搜索的概念及场景模型关于Map的说明关于Map.Entry<K,V>的说明Map的常用方法说明TreeMap的使用案例Set的常见......
  • Python的Matplotlib库详解
    Python的Matplotlib库详解Matplotlib是Python中功能强大的数据可视化库,广泛应用于科研、数据分析、报告生成等领域。它能创建各种类型的图表,帮助用户直观地展示数据。一、使用场景1.数据探索和分析:在数据科学领域,Matplotlib经常被用来绘制各种图表,如折线图、散点图、......
  • Spring高手之路22——AOP切面类的封装与解析
    1.AOP是如何收集切面类并封装的?在 Spring 中,AOP(Aspect-OrientedProgramming,面向切面编程)通过以下几个步骤收集切面类并进行封装:1.定义切面类:切面类通过 @Aspect 注解来标记,表示这是一个切面。在切面类中定义通知(advice),例如 @Before、@After、@Around 等,用于指定在目标方法......
  • c语言分支与循环详解
    使用if、switch实现分支结构,使用for、while、dowhile实现循环结构分支:1.1if语句的语法if(表达式) 语句;在c语言中0表示假,则语句不执行。非0表示真,语句执行1.2else与if对应,比如说一个数不是奇数就是偶数了if(表达式) 语句1;else 语句2;表达式成立则执行语句1,不成......
  • 【Material-UI】Text Field中的 Performance 优化详解
    文章目录一、TextField组件概述1.组件介绍2.性能挑战二、全局样式注入行为的优化1.问题的根源2.禁用全局样式注入3.自定义全局样式三、实际场景中的性能优化应用1.大规模表单中的优化2.动态表单生成中的优化3.提升用户体验四、最佳实践与注意事项1.谨慎使......
  • pbshr80.dll丢失问题详解:识别症状、分析原因与采取行动
    在使用计算机的过程中,我们经常会遇到各种各样的问题,其中之一就是DLL文件丢失或损坏。本文将针对“pbshr80.dll”这个特定的DLL文件丢失的情况进行详细的分析,并提供几种有效的解决方案。pbshr80.dll文件简介pbshr80.dll是一个动态链接库文件(DynamicLinkLibrary),通常与某些游......
  • 1.15 新型基础设施建设的内容详解
    今天讲解了系统集成项目管理工程师教程视频课程(第3版)所涉及的新型基础设施建设的内容详解相关的考试知识点,想通过考试的朋友可以点击链接,看完整版。......
  • 【Linux】命令expect使用详解
    一、概述1.1命令简介expect是由DonLibes基于Tcl(ToolCommandLanguage)语言开发的,是一种脚本语言,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可......
  • 数据结构-单链表-详解-2
    数据结构-单链表-详解-21.前言2.创建新结点3.头插与尾插3.1头插3.2尾插空链表找尾4.头删与尾删4.1头删4.2尾删1.前言在数据结构-单链表-详解-1中,我们不仅了解了单链表的基本概念,还掌握了如何创建和打印单链表。今天,我将详细讲解如何对单链表进行头尾部的插入、......