Spring系列博客:Spring特性(一)--对于spring中的ioc和aop的认识

        众所周知,spring的核心特性就是ioc和aop。ioc,即“控制反转”;aop,即“面向切面编程”。

如何通俗易懂的理解IOC

        IOC的另一种说法叫DI,即依赖注入。它并不是一种技术实现,而是一种设计思想。在任何一个有实际开发意义的项目中,我们会使用很多类来描述它们特有的功能,并且通过类与类之间的相互协作来完成特定的业务逻辑。这个时候,每个类都需要负责管理与自己有交互的类的引用与依赖,代码将会变得异常难以维护和极度的高耦合。而IOC的出现正是用来解决这个问题,我们通过IOC将这些相互依赖的对象的创建、协调工作交给Spring容器去处理,每个对象只需关注其自身的业务逻辑关系即可。

        举个例子:

        某一天,你生病了,但是你不清楚自己到底得了什么病,你只知道自己头疼,咳嗽,全身无力。这个时候你决定去药店买药,药店有很多种药,仅仅是治疗头疼的就有好几十钟,还有西药中药等区别。然后你自己看了看说明书,选择了一盒你自己决定最能治疗自己病症的药,期待可以早点好起来。

        但是这个过程,对于一个病人来说,太辛苦了。头疼,咳嗽,全身无力,还要一个一个的比较哪个药比较好,简直太累了。这个时候,你决定直接去看医生。

        医生给你做了检查,知道你的病症是什么,有什么原因引起的;同时医生非常了解有哪些药能治疗你的病痛,并且能根据你的自身情况进行筛选。只需要短短的十几分钟,你就能拿到对症下药的药品,既省时又省力。

        在上面这个例子中,IOC起到的就是医生的作用,它收集你的需求要求,并且对症下药,直接把药开给你。你就是对象,药品就是你所需要的外部资源。通过医生,你不用再去找药品,而是通过医生把药品开给你。这就是IOC的精髓所在。

AOP又是如何理解的

        AOP,面向切面编程,往往被定义为促使软件系统实现关注点分离的技术。系统是由许多不同的组件所组成的,每一个组件负责一块特定功能。除了实现自身核心功能之外,这些组件还经常承担着额外的职责。例如,日志、事务管理和安全这样的核心服务经常融入到自身具有核心业务逻辑的组件中去。这些系统服务经常被称为横向关注点,因为他们是跨越系统的多个组件。

        现在,我们以一个系统中的多个实现来讲讲AOP具体是一个什么技术。

        我们以系统中常用到的事务管控举例子。在系统操作数据库的过程中,不可避免地要考虑到事务相关的内容。如果在每一个方法中都新建一个事务管理器,那么无疑是对代码严重的耦合和侵入。为了简化我么的开发过程,需要把事务相关的代码抽出来作为一个独立的模块。通过AOP,确认每一个操作数据库方法为一个连接点,这些连接点组成了一个切面。当程序运行到其中某一个切点时,我们将事务管理模块顺势织入对象中,通过通知功能,完成整个事务管控的实现。这样一来,所有的操作数据库的方法中不在需要单独关心事务管理的内容,只需要关注自身的业务代码的实现即可。所有的事务管控相关的内容都通过AOP的方式实现了。简化了代码的内容,将目标对象复杂的内容进行解耦,分离业务逻辑与横切关注点。

猜你喜欢

转载自blog.csdn.net/liuziteng0228/article/details/79774149
今日推荐