谈谈你对IOC和AOP的理解

IOC

IOC 就是控制反转,控制反转是一种设计思想,而不是一种具体的技术实现

在 Spring 中,控制反转指的是将对象的控制权转移给 Spring 框架进行管理,由 Spring 帮我们创建对象,管理对象之间的依赖关系

以前创建对象的主动权和时机都是由自己把控的,现在由 IOC 容器来做,在很大程度上简化了应用的开发

IOC 容器实际上就是一个 Map 的键值对,Map 里面存放的是各种对象。IOC 容量就像一个工厂一样,当我们需要创建对象的时候,只需要通过 xml 配置文件或者注解,把对象注册到组件中,而我们完全不用考虑对象是如何被创建出来的

其中,IOC 的最常见以及最合理的实现方式叫做依赖注入(DI)

使用 IOC 的优点 降低对象之间的依赖程度和耦合度 便于资源的管理。在 IOC 容器中,所有对象默认都是单例的

IoC解决对象之间的耦合问题

IoC和DI的区别

DI:Dependancy Injection(依赖注⼊) 怎么理解: IOC和DI描述的是同⼀件事情,只不过⻆度不⼀样罢了

IOC和DI描述的是同一件事情(对象实例化及依赖关系维护这件事情),只不过角度不同罢了 IOC是站在对象的角度,对象实例化及其管理的权利交给了(反转)给了容器 DI是站在容器的角度, 容器会把对象依赖的其他对象注入(送进去),比如A对象实例化过程中因为声明了一个B类型的属性,那么就需要容器把B对象注入给A

AOP

AOP面向切面编程基于IoC,是对OOP的有益补充;AOP代表的是一个横向的关系,剖解开封装的对象内部,并将那些影响了 多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即切面。简单地说,就是将那些与业务无关,却为业务模块所共同调用的 逻辑或责任封装起来,比如日志记录,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

AOP使用场景: Authentication 权限检查 Caching 缓存 logging, 日志记录 Persistence  持久化 Resource pooling 资源池 Synchronization 同步 Transactions 事务管理

AOP: Aspect oriented Programming ⾯向切⾯编程/⾯向⽅⾯编程 AOP是OOP的延续,从OOP说起

OOP三⼤特征:封装、继承和多态

oop是⼀种垂直继承体系

OOP编程思想可以解决⼤多数的代码重复问题,但是有⼀些情况是处理不了的,⽐如在顶级⽗类 Animal中的多个⽅法中相同位置出现了重复代码,OOP就解决不了

横切逻辑代码

在多个纵向(顺序)流程中出现的相同子流程代码,我们称之为横切逻辑代码 横切逻辑代码的使用场景很有限:一般是事务控制、权限校验、日志

横切逻辑代码存在什么问题: 横切代码重复问题 横切逻辑代码和业务代码混杂在⼀起,代码臃肿,维护不⽅便 AOP出场,AOP独辟蹊径提出横向抽取机制,将横切逻辑代码和业务逻辑代码分析

代码拆分容易,那么如何在不改变原有业务逻辑的情况下,悄⽆声息的把横切逻辑代码应⽤到原有的业务逻辑中,达到和原来⼀样的效果,这个是⽐较难的

AOP在解决什么问题 在不改变原有业务逻辑情况下,增强横切逻辑代码,根本上解耦合,避免横切逻辑代码重复

为什么叫做⾯向切⾯编程 「切」:指的是横切逻辑,原有业务逻辑代码我们不能动,只能操作横切逻辑代码,所以⾯向横切逻辑 「⾯」:横切逻辑代码往往要影响的是很多个⽅法,每⼀个⽅法都如同⼀个点,多个点构成⾯,有⼀个⾯的概念在⾥⾯

点赞

当前页面评论已关闭。

隐藏
变装