IOC/AOP

作者: 尘埃里的玄 | 来源:发表于2020-05-25 07:10 被阅读0次

我在了解spring的时候,经常看到两个概念,即:IOC和AOP

IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”,还有些书籍翻译成为“控制反向”或者“控制倒置”。1996年,Michael Mattson在一篇有关探讨面向对象框架的文章中,首先提出了IOC 这个概念。简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦。这个“第三方”就是IOC容器,其实在spring中也经常听到另外一个术语,即为DI。

DI为依赖注入,我个人理解就是是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中所以,依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。

IOC容器帮助我们完成了代码的低耦合或者没有耦合,在A类想使用B类的某个方法,不像之前的代码需要在类a中new一个B的实例或者匿名对象,而是在运行时交给ioc容器来生产和传输、销毁。

IOC的底层技术支持是java的反射机制。反射这个我也经常遇到,我本人在学习其他语言如:.net php python go都有反射的特性。反射我本人的简单理解就是通过类的名字在代码运行时生成实例,如:java的spring、hibernate,. net的entityFramework等流行框架都是基于反射来开发的。

接下来我们在研究下AOP。

AOP(Aspect Oriented Programming)指的是面向切面编程。在了解AOP之前,我对OOP(Object Oriented Programming)已经了解了很多,但是OOP有一些弊端,比如当我们需要为多个不具有继承关系的对象引入一个公共行为,例如日志,权限验证,事务等功能时,只能在在每个对象里引用公共行为,这样做不便于维护,而且有大量重复代码。AOP的出现弥补了OOP的这点不足。

我在开始搜集了解aop时,还需要去了解代理模式。啥叫代理模式?对其他对象提供一种代理以控制对这个对象的访问。这段话我百度官方给的概念,我自己的理解是:比如A对象要做一件事情,在没有代理前,自己来做,在对A代理后,由A的代理类B来做。代理其实是在原实例前后加了一层处理,这也是AOP的初级轮廓。其实代理说白了就是找一个中间人。

代理模式分为静态代理和动态代理。

静态代理:静态代理说白了就是在程序运行前就已经存在代理类的字节码文件,代理类和原始类的关系在运行前就已经确定。

静态代理虽然保证了业务类只需关注逻辑本身,代理对象的一个接口只服务于一种类型的对象,如果要代理的方法很多,势必要为每一种方法都进行代理。再者,如果增加一个方法,除了实现类需要实现这个方法外,所有的代理类也要实现此方法。增加了代码的维护成本。那么要如何解决呢?答案是使用动态代理。

动态代理:动态代理类的源码是在程序运行期间通过JVM反射等机制动态生成,代理类和委托类的关系是运行时才确定的。

所以AOP是基于动态代理模式的。

此上都为基本的概念,具体理解还需从代码中感悟。

相关文章

  • 7

    Spring: 1、IOC,AOP IOC:Inversion of Control,控制反转 AOP:Aspec...

  • IOC和AOP

    IoC与AOP的那点事儿[%5Bhttp://blog.didispace.com/spring-ioc-aop/...

  • Java面试题:Spring IOC容器启动流程附源码

    1. IOC容器概述 IOC和AOP是Spring框架的核心功能,而IOC又是AOP实现的基础,因而可以说IOC是...

  • Spring要点

    1.spring IOC AOP原理: IoC(Inversion of Control): IoC就是应用本身...

  • Spring中的两大核心(Spring是一个IOC和AOP容器框架) IOC与aop IOC(spring的核心思...

  • Spring学习小记

    IOC AOP Hibernate SpringMVC

  • spring笔记

    Spring 框架两大核心机制(IoC、AOP) IoC(控制反转)/ DI(依赖注入) AOP(面向切面编程) ...

  • Java 面试问题系列三(Spring)

    1、Spring 主要思想是什么,回答 IOC 和AOP,怎么自己实现 AOP ? IOC 的好处 使用基于反射的...

  • SpringAop工作原理

    概述 Spring的两大特性: AOP IOC 关于IOC我们先放在一边,这篇文章主要聊一下AOP。 AOP(As...

  • 理解springAop的正确姿势

    Spring有两大核心,IOC和AOP。IOC在spring项目中基本无处不在,而AOP则用的基本比较少。 AOP...

网友评论

      本文标题:IOC/AOP

      本文链接:https://www.haomeiwen.com/subject/qbreahtx.html