Spring Framework

(非原创,多篇文章理解整合)
1.前言

1.1 什么是framework?

    framework字面翻译为框架。在IT语境中通常是指的是为了实现某个业界标准或完成特定基 

    本任务的软件组件规范,也指为了实现某个软件组件规范时,提供规范所要求之基础功能的

    软件产品。

    上述描述不由会想到另外一个单词 Library,库。库是代码的集合,软件行业中库中通常保存

    的是一组常用的函数,或者在面向对象的世界里,保存了一系列的类来实现代码的复用。作

    为用户的你只需要调用库中的方法即可,而不用再去创造方法,不是重复的”造轮子“。

1.2 framework和library有什么区别?

首先框架是相对库更大程度的一种规范,或又是针对此规范的实现。

Library和Framework最大的区别是:don’t call us, we’ll call you,是著名的The Hollywood principle-好莱坞原则。

如何理解上述区别?

Library调用的时候,我们可以按照自己的意愿来选择如何调用它。

Framework则是反转的,是框架决定如何调用你。这一设计思想称为控制反转IOC,ioc

是一种面向对象设计及编程的设计思想,后面会详细描述。

2. Spring 入门

  Spring是一个用于Java企业开发,强大的轻量级应用开发框架。在某种程度上,Spring可以看

  做是框架的框架——它可以整合多种框架,如:Struts、Hibernate等,也就有了我们所熟SSH

  (Struts+Spring+Hibernate)。Spring采用分层架构的设计,发展至今,已经包含了20多个

  模块,不同的模块有着不同的功能,可以选择使用。

3. Spring框架简介

Spring Framework是一个Java平台框架,它为开发Java应用程序的全面的基础架构支持。

Spring处理基础架构,以便你可以专注于应用程序。

3.1 Spring Framework架构组成

  Spring框架由大约20个功能模块组成。 这些模块分为核心容器,数据访问/集成,Web,

  AOP(面向方面的编程),仪器,消息传递和测试,如下图所示。

Core Container:容器包含了spring-core,spring-beans,spring-context,spring-context-

support,spring-expression这五个模块,包含IoC、DI核心特性。

AOP & Instrumentation:spring-aop提供了一个面向切面编程的实现,单独的spring-aspects模 块提供与AspectJ框架的集成。

Messaging:spring-messaging 是Spring 4中新添加的模块,为集成messaging api和消息协

议提供支持。同样也提供了一些映射消息到方法的注解,类似spring mvc注解。

Data Access/Integration:不难理解,为数据访问层提供支持,包含JDBC, ORM,OXM, JMS 和 Transaction 模块。

Web:包含spring-web,spring-webmvc, spring-websocket,和 spring-webmvc-portlet模块。主要为Web开发提供支持。

Test:spring-test模块使用JUnit或者TestNG为Spring各个组件提供单元测试与集成测试。

控制反转(IOC)就是Spring中两个主要的概念之一,另外一个就是AOP(面向切面)

3.2 IOC & DI

3.2.1 什么是IOC

  IOC是Inversion of Control的缩写,多数书籍翻译成“控制反转”。IOC可以认为是一种全新的

  设计模式,体现了著名的The Hollywood principle-好莱坞原则:don’t call us, we’ll call you。

  简单来说就是把复杂系统分解成相互合作的对象,这些对象类通过封装以后,内部实现对外

  部是透明的,从而降低了解决问题的复杂度,而且可以灵活地被重用和扩展。

IOC理论提出的观点大体是这样的:借助于“第三方”实现具有依赖关系的对象之间的解耦。

3.2.2 控制反转(IOC)到底为什么要起这么个名字?

 传统程序设计是在一个对象内部通过new创建它所依赖的对象,是程序员在代码中控制对

 象的创建。这样类与类之间就高度耦合了,程序变得非常不灵活,不易于复用。而有了

 IoC容器后,创建和查找依赖对象的控制权交到了容器手中,有容器注入依赖对象,对象

 与对象之间的关系变成了松耦合。

软件系统在没有引入IOC容器之前,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。

软件系统在引入IOC容器之后,这种情形就完全改变了,如上图所示,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。

总结:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。

3.2.3 什么是依赖注入(DI)?

2004年,Martin Fowler探讨了同一个问题,既然IOC是控制反转,那么到底是“哪些方面的控制被反

转了呢?”,经过详细地分析和论证后,他得出了答案:“获得依赖对象的过程被反转了”。控制被反转

之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入。于是,他给“控制反转”取了一个更

合适的名字叫做“依赖注入(Dependency Injection)”。他的这个答案,实际上给出了实现IOC的

方法:注入。所谓依赖注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

依赖注入(DI)和控制反转(IOC)是从不同的角度的描述的同一件事情,就是指通过引入IOC容器,利用依赖关系注入的方式,实现对象之间的解耦。

IoC 告诉我们:容器控制对象,而 DI 告诉我们:被注入对象依赖IoC容器配置依赖对象。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容