Spring是一个开源的轻量级的Java企业应用开发框架,其初衷是为了替代当时很是笨重的Java EE(当时还称为J2EE)组件技术EJB(Enterprice Java Beans),让Java EE开发更加简单灵活。前端
Spring最重要的两个核心功能是依赖注入(DI,Dependency Injection)和面向切面编程(AOP,Aspect Oriented Programming)。其中DI用于管理Java对象之间的依赖关系,AOP用于解耦业务代码和公共服务代码(如日志,安全,事务等)。DI和AOP可以让代码更加简单,具备良好的松耦合特性和可测试性,极大地简化开发。理解这二者是使用Spring框架的基础。数据库
Spring框架自己具备模块化的分层架构,开发者能够根据须要使用其中的各个模块。Spring框架对Java企业应用开发中的各种通用问题都进行了良好的抽象,所以也可以把应用各个层次所涉及的特定开发框架(如MVC框架、ORM框架)方便得组合到一块儿。Spring是一个极其优秀的一站式的Full-Stack集成框架。编程
DI(Dependency injection依赖注入)缓存
面向对象的程序经过一组对象之间相互通讯来实现特定功能,这里的通讯具体来讲就是一个对象对另外一个对象的方法调用或者属性访问。好比有一个BlogRespositry
类负责将博客内容存储到数据库,一个BlogServlet
负责解析前端的Web请求。BlogServlet
接受到新建博客的请求以后,须要调用BlogRespositry
的方法来保存博客内容。这里BlogRespositry
就是BlogServlet
的一个依赖,具体体如今BlogServlet
会包含一个BlogRespositry
类型的成员变量。安全
而使用依赖注入技术,则BlogRespositry
的依赖(即BlogService
类)是由外部实例化以后注入给它的。依赖注入也称为控制反转(IoC,Inversion of Controll)。当建立一个对象时,它所依赖的对象由外部传递给它,而非本身去建立所依赖的对象(向例子中这样经过new
操做)。所以,也能够说在对象如何获取它的依赖对象这件事情上,控制权反转了。这即是控制反转和依赖注入这两个名字的由来了。架构
DI可让对象之间的关系更加松耦合,并且会促使你使用面向接口编程,同时也让测试更加方便。app
AOP框架
面向切面编程(Aspect Oriented Programming,AOP)是一种关注点分离的技术,通俗的说就是有机地将各部分代码进行分离,各司其职,互不干扰。软件开发中常常提一个词,叫作“业务逻辑”或者“业务功能”,咱们的代码主要就是实现某种特定的业务逻辑。可是咱们每每不能专一于业务逻辑,好比咱们写业务逻辑代码的同时,还要关注事务管理、缓存、日志等一系列通用功能,若是每一个业务功能都要和这些通用功能混在一块儿,是一件很是低效和痛苦的事情。因此,为了将业务功能的关注点和通用化功能的关注点分离开来,就须要AOP技术了。通用功能的代码实现,对应的就是咱们说的切面(Aspect)。模块化
简而言之,AOP就是一种在开发时将业务相关代码和业务无关的通用功能代码有机分离,而运行时又可以整合到一块儿造成完整功能的一整套技术。Spring框架中一些模块自己就是基于AOP技术来实现的,例如事务处理和安全相关的模块。单元测试
Spring包含六个部分功能,这六部份实现的功能功能分别为: