Spring的IOC和AOP
Peng's Blog 只记录和技术相关的东西

Spring的IOC和AOP

2017-09-03

介绍

首先你要知道它们两的中文名。

IOC:Inverse Of Control(控制反转),有时候又叫 DI(依赖注入);

AOP:Aspect oriented programming,面向切面编程。

  • 控制反转(IOC):Spring使用控制反转技术实现了松耦合。依赖被注入到对象,而不是创建或寻找依赖对象。
  • 面向切面编程(AOP): Spring支持面向切面编程,同时把应用的业务逻辑与系统的服务分离开来。

IOC

控制反转,依赖注入。IOC技术的本质就是将一个类实例化成一个对象的技术。

总而言之,耦合是必须的,但应当小心谨慎的管理它。通过控制反转或者依赖注入,对象的依赖关系将由负责协调系统中各个对象的第三方组件在创建对象时设定。对象无需自行创建或管理它们的依赖关系,依赖关系将被自动注入到需要它们的对象中去。

生活中的IOC:

例如我们有个roo对象作用是完成打猎的操作,那么打猎这个对象内部包含两个辅助对象:人和枪,只有人和枪赋予了打猎这个对象,那么打猎对象才能完成打猎的操作,但是构建一个人和枪的对象并不是看起来那么简单,这里以枪为例,要创造一把枪我们需要金属,需要机床,需要子弹,而机床和子弹又是两个新对象,这些对象一个个相互嵌套相互关联,大伙试想下如果我们在java代码里构建一个枪的对象那是何其的复杂,假如我们要构造的不是简单的枪对象而是更加复杂的航空母舰,那么构造这个对象的成本之高是让人难以想象的,怎么来消除这种对象相互嵌套相互依赖的关系了?

Spring提供了一种方式,这种方式就是Spring提供了一种容器,我们在xml文件里定义各个对象的依赖关系。由容器来完成对象的构建。

控制反转的意思就是把本来属于Java程序里构建对象的功能由容器接管,

依赖注入就是当程序需要使用某个对象的时候,容器会把它注入到程序里。

至于对象是怎么创建的,这个主要是要依靠你配置的XML文件里的bean(bean需要提供全类名),然后Spring利用反射机制将对象创建出来,然后放到自己的数据结构里面,比如Map,然后键就是bean中的id属性的值,值就是创建的对象。

AOP

面向切面编程。主要是把业务逻辑和系统的服务分离开来,实现解耦。

这是一种设计模式的思想,代理模式。把一些事情交给代理来做,封装被代理对象,并限制外界对代理对象的访问。

一般会和OOP(面向对象编程)进行比较。

OOP专注于对象,OOP专注于对象,我们利用对象的属性和行为来解决显示中的问题;

AOP用来在使用OOP解决问题的过程中,增强解决问题的能力。实现更好的模块化。

切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。在Spring AOP中,切面可以使用基于模式)或者基于@Aspect注解的方式来实现。

作用:AOP可以从增强模块化以及降低切面与业务逻辑的耦合度来增强OOP程序。使用AOP可以为需要某些特定功能的对象集合增加功能而不必修改这些对象的类代码。也就是我们将与实际业务逻辑无关但是需要关注的部分提取出来通过AOP来动态的添加到业务逻辑代码中。即使这些Aspect的实现机制以及代码进行了修改,只需改动一处而不会影响原有业务逻辑代码。

参考资料

  1. Spring的IOC和AOP
  2. Spring学习笔记 什么是AOP
  3. 使用Spring进行面向切面编程(AOP)

Comments

评论功能暂停使用,如需跟作者讨论请联系底部的GitHub