Spring的IOC与AOP

2018-08-23  本文已影响5人  ZMRWEGo
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。

为什么要使用spring的框架进行开发?这个问题当然要从spring容器的特性开始回答。spring最经典的两个特性即:控制反转(IOC)和面向切面编程(AOP)。它使得传统的程序设计更加灵活,各个模块间的耦合度也更低。

我们可以从三张图中清楚的看到spring容器IOC的作用,在没有容器的情况下,软件系统的各个组件之间的构成是这样的

图1 各个组件之间的耦合度很高,当系统中的一个组件出现问题时,会使得整个系统停止运转,这种齿轮的啮合关系和软件系统中各个组件共同协作运行是一样的。简单的说就是一损俱损。所以才有了IOC(Inversion of Control)理论的提出,即通过第三方的容器实现具有依赖关系的组件之间的解耦,我们也可以称之为依赖注入(DI:Dependency Injection),这种模式就相当于下图所示:
图2
由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器,所以,IOC容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作用,如果没有这个“粘合剂”,对象与对象之间会彼此失去联系,这就是有人把IOC容器比喻成“粘合剂”的由来。拿掉IOC容器之后的情况: 图3 依赖注入这时也不难理解了吧,在没有容器的时候,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上;软件系统在引入IOC容器之后,这种情形就完全改变了,如图3所示,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。
通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。

AOP即面向方面的编程,是面向对象编程(OOP)的一种补充技术。 面向对象将应用程序分解成各个层次的对象,而AOP将程序分解成各个方面或者说关注点 。这使得可以模块化诸如事务管理等这些横切多个对象的关注点。

Spring AOP 是Spring 框架的重要组成部分,它实现了AOP联盟约定的接口。Spring AOP 是由纯Java开发完成的。Spring AOP 只实现了方法级别的连接点,在J2EE应用中,AOP拦截到方法级的操作已经足够。OOP倡导的是基于setter/getter 的方法访问,而非直接访问域,而Spring 有足够理由仅仅提供方法级的连接点。为了使控制反转(IoC)很方便的使用到非常健壮、灵活的企业服务,则需要Spring AOP 的实现。Spring AOP 在运行时才创建Advice 对象。Spring AOP的优点如下:

上一篇 下一篇

猜你喜欢

热点阅读