IOC和AOP,也就是依赖注入和面向切面编程
先来说说IOC,在我们任何一个有实际意义的项目开发中,都会有很多的类,来描述他们特有的功能,并且通过类与类之间的协调工作,来完成特定的业务逻辑,这个时候每个类都需要负责管理与自己有交互的类的引用和依赖,代码会变得异常的难以维护和极度的高耦合,而IOC的出现正是为了解决这一问题,我们通过IOC将这些相互依赖对象的创建,之后交给spring去处理,没个对象只需要关心自己的业务逻辑关系即可,从这个角度来说,获取对象的方式发生的反转,变成了由spring容器控制对象如何获取外部资源(包括其他对象和文件资料等)
[
举这么一个例子,某一天,一个人生病了,这时候他决定到医院买药,但他只知道自己头疼,并不清楚自己到底得了什么病,而药店的药有好多种,单是治头疼的就要有好几十种,还有中药西药什么的这些,然后一个个的看看这些说明书,最后选择一个自己觉得自己能够治好病的药,付钱买药,回去吃药期望自己能够早点好起来,但这个过程对于一个病人来说,无非是很痛苦的,头痛,咳嗽,浑身无力,还要到药店花很长的时间看说明书,一个个比较那个药好,这个无疑是非常痛苦的,
于是他选择去医院看医生,然后医生给你做了检查,知道你的病是什么引起的,而且医生非常了解哪些药可以治疗你这个病,之后根据你的自身情况进项筛选,只需要十几分钟,你就能拿到对症的药,既省时有省力
]
在上面的例子中,IOC就扮演者医生的角色,他收集病人需要的要求,对症下药,对症下药,直接把要药开给病人,病人就是对象,药品就是你需要的外部资源,通过医生,你不用再去自己找药, 而是通过医生直接把药开给你,这就是IOC的精髓
而AOP的话,也就是所谓的面向切面编程,就是通过为项目中某些对象创建动态代理对象通过动态代理对象解决现有项目中通用的问题,例如日志,性能记录,和一些异常处理.
AOP代表的是一个横向的关系,程序的执行时顺序执行的,我们可以简单的理解为一个线性执行,自上而下,就像一条线,所谓切面编程,就是说在这条线的某一点处切开,放入另一个程序,这个过程也就是我们所谓的编织, 而被切入处我们可以用几何常识形象的称之为切面.