spring中的ioc和aop概念
众所周知,现在最流行的三大框架就是Spring、Spring MVC和Mybatis。使用Spring,主要是方便了普通的程序员进行快速开发。
控制反转(IOC,Inversion Of Controll)
控制反转指的是对象创建责任的反转。原本我们需要创建一个对象必须要手动去new一个,那么在类中由于代码越来越多,需要管理的依赖和引用也会越来越多,代码维护的成本也会越来越高。Spring就把创建对象的控制权交给了IOC容器去完成。
举个例子,某一天你生病了,但是你不清楚自己到底得了什么病,你只知道自己头疼,咳嗽,全身无力。这个时候你决定去药店买药,药店有很多种药,仅仅是治疗头疼就有好几十种,还有西药中药等区别。然后你自己看了看说明书,选择了一盒你自己觉得最能治疗自己病症的药,付钱吃药,期待可以早点好起来。但是这个过程,对于一个病人来说,太辛苦了。头疼,咳嗽,全身无力,还要一个个的看药品说明书,一个个的比较哪个药比较好,简直是太累了。这个时候,你决定直接去医院看医生。医生给你做了检查,知道你的病症是什么,由什么原因引起的;同时医生非常了解有哪些药能治疗你的病痛,并且能根据你的自身情况进行筛选。只需要短短的十几分钟,你就能拿到对症下药的药品,即省时又省力。这里医生的作用就是IOC的作用,它收集你的需求,并根据你的需要给你资源,其他的不需要管,你就可以用这个资源。通过IOC容器去协调互相依赖对象的创建,每个对象只需要关注自己的业务逻辑关系即可。
面向切面编程(AOP,Aspect-Oriented Programming)
首先AOP的目的是为了解耦,其中最经典的一个例子就是日志记录。在没有使用Spring之前,我们要记录日志就必然会产生很多类似的代码,这些与业务无关的日志代码与业务代码耦合在了一起。Spring就把这些业务无关的代码(横切)分离成不同的组件,每个组件各负责一块功能,在需要使用这个功能的时候,通过定义好的切点,将组件织入到业务代码中,从而达到我们想要的效果。
连接点:在应用执行过程中能够插入切面的一个点。
通知:定义了切面是什么以及何时使用的概念,一共有5种通知类型。
前置通知(Before):在目标方法被调用之前调用通知。
后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么。
返回通知(After-Returning):在目标方法成功执行之后调用通知。
异常通知(After-Throwing):在目标方法抛出异常后调用通知。
环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为。
切面:通知和切点(连接点)的结合。
引入:允许我们向现有类添加新的方法或属性。
织入:把切面应用到目标对象,并创建新的代理对象的过程。
"我可以假装过得很好。"