Spring框架实现原理

为什么要使用Spring


众所周知,现在最流行的三大框架就是Spring、Spring MVC和Mybaits,那么为什么要使用Spring?使用Spring给我们带来了什么好处呢?我带着这个问题查了一些资料,其实回答的内容都是大同小异,说到底无非就是方便普通程序员进行快速开发呗!那么它与其他框架相比有什么做的更好的地方呢?


一、 控制反转IOC(Inversion Of Control)

对象创建责任的反转,原本我们需要创建一个对象都必须要手动去new一个,那么在类中由于代码越来越多,需要管理的依赖和引用也会越来越多,代码维护的成本也会越来越高。

举例:某一天,你生病了,但是你不清楚自己到底得了什么病,你只知道自己头疼,咳嗽,全身无力。这个时候你决定去药店买药,药店有很多种药,仅仅是治疗头疼就有好几十种,还有西药中药等区别。然后你自己看了看说明书,选择了一盒你自己觉得最能治疗自己病症的药,付钱吃药,期待可以早点好起来。
但是这个过程,对于一个病人来说,太辛苦了。头疼,咳嗽,全身无力,还要一个个的看药品说明书,一个个的比较哪个药比较好,简直是太累了。这个时候,你决定直接去医院看医生。医生给你做了检查,知道你的病症是什么,有什么原因引起的;同时医生非常了解有哪些药能治疗你的病痛,并且能根据你的自身情况进行筛选。只需要短短的十几分钟,你就能拿到对症下药的药品,即省时又省力。

而IOC就是这个医生的作用,它收集你的需求,并根据你的需要给你资源,其他的不需要管,我就可以用这个资源。通过String去协调互相依赖对象的创建,每个对象只需要关注其自身的业务逻辑关系即可。

二、面向切面编程AOP(Aspect-OrientedProgramming)
首先AOP的目的是为了解耦,其中最经典的一个例子就是日志记录。在没有使用Spring以前,我们要记录日志就必然会产品很多类似的代码且与业务代码耦合在一起,因此Spring就把不同的组件进行分离,每个组件各负责一块功能,在需要使用这个功能时,通过定义好的切点,将模块织入到业务代码中,从而达到我们想要的效果。以下是AOP相关的术语:

  • 连接点:在应用执行过程中能够插入切面的一个点
  • 通知:定义了切面是什么以及何时使用的概念。一共有5种类型通知:
    • 前置通知(Before):在目标方法被调用之前调用通知
    • 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么
    • 返回通知(After-returning):在目标方法成功执行之后调用通知
    • 异常通知(After-throwing):在目标方法抛出异常后调同通知
    • 环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为
  • 连接点:在应用执行过程中能够插入切面的一个点
  • 切面:通知和切点的结合
  • 引入:允许我们向现有类添加新的方法或属性
  • 织入:把切面应用到目标对象,并创建新的代理对象的过程

其中String中还使用了9种设计模式,详见https://www.cnblogs.com/hwaggLee/p/4510687.html

你可能感兴趣的:(spring)