IoC&AOP详解

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)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值