Spring是一个轻量级的、非侵入式的容器框架;对Bean对象的生命周期进行管理。

Spring框架的核心:IOC(控制反转)、DI(依赖注入)、AOP(面向切面编程)。

(1) IOC:控制反转。

    传统的Java开发过程中,当需要一个对象的时候,我们需要自己new或者getInstance等直接或间接调用构造方法创建一个对象;而在Spring容器中,Spring容器利用  工厂模式(BeanFactory)为我们创建了所需要的对象,使用时无须自己创建,直接调用Spring为我们创建的对象即可,这就是控制反转的思想。

  优点:

简化了我们对对象的管理,交给了Spring管理;程序员不用再自己创建对象,需要时直接从Spring中取。由主动创建对象变成了被动接收对象,控制权反转,减轻了程序员的代码量,提高了开发效率。打个比方:IOC就像现在得订餐APP,以前我们吃饭需要自己去做,去New一顿饭出来;现在我们有了订餐APP(Spring),我们只需要登录这个APP,在APP订餐页面applicationtext.xml(Spring配置文件)填写你想吃的饭(也就是Bean对象),然后就可以预定你要吃的饭,想要猪头肉就会给你送猪头肉,想要红烧肉就会送红烧肉;各种菜就像是Property,这样我们坐在家中就可以吃到饭了,不用自己再动手去做了。

(2)DI:依赖注入。

    Spring框架为我们提供了三种注入方式,分别是set注入,构造方法注入,接口注入。

    Spring使用JavaBean对象的Set方法或者带参数的构造方法为我们创建所需要的对象时将其属性自动设置为所需要的值的过程就是依赖注入的思想。

 优点:

有了Spring容器,当我们想要创建一个Service时,就可以直接从Spring容器中拿;或者想在Service中调用Dao也不需要在Service里创建,因为Spring会从容器中取出Dao,并注入到Service里,也就是依赖注入。

(3)AOP:面向切面编程。

    在面向对象编程(OOP)中,我们将事物纵向抽象成一个个的对象。而在面向切面编程中,我们将一个个对象某些类似的方面横向抽象成一个切面,对这个切面进行一些如:权限验证,事务管理,记录日志等公用操作处理的过程就是面向切面编程的思想。

总结:使用Spring的目的:就是让对象与对象或者模块与模块之间的关系没有通过代码关联,都是通过配置类说明管理的(Spring根据这些配置内部通过反射去动态的组装对象)。

注:控制反转和依赖注入的简单理解:

控制反转IOC:当某个角色需要调用另一个角色的协助时,在传统的程序设计中,通常由调用者创建被调用者的实例,如果创建被调用者实例的工作 不再由调用者来完成,而是由外部容器来完成。

依赖注入DI:创建被调用者实例的工作通常由外部容器来完成,然后注入调用者,因此也称为依赖注入。