Spring(一)概论

简介

  Spring最早的时候就是指的SpringFramework,后来有很多基于spring的扩展框架出现,如SpringBoot, SpringSecurity, SpringData, SpringCloud, SpringBatch等,我们统称其为SpringFamily(即SpringProjects)。Spring在狭义上指的就是SpringFramework,而广义上指的就是SpringFamily。
  本系列基于SpringFramework5.2.0的官方文档,字里行间融合了本座的编程设计思想,其间有错误或不当之处请读者不吝赐教。本座邮箱为:lanny1358@163.com

原则

  对于框架的使用者来说,SpringFramework设计的指导性原则虽然并不重要,但其优秀的设计思想是值得借鉴的(区别程序员级别的主要考察点不是谁会更多的编程语言,而是对框架的设计的认知高度)。
  以下便是SpringFramework设计的指导性原则

  • 在每个层次都提供选择:Spring允许您尽可能推迟设计决策。例如,您可以在不更改代码的情况下通过配置切换持久性提供者、日志打印方案。对于许多其他基础设施问题,以及与第三方api的集成也是如此。
  • 容纳不同的观点:Spring拥抱灵活性,并不对事情应该如何做固执己见,它以不同的视角支持广泛的应用程序需求。
  • 保持强烈的向后兼容性:Spring支持精心选择的JDK版本和第三方库,以促进依赖于Spring的应用程序和库的维护。
  • 关心API设计:Spring团队将大量的思想和时间投入到制作api中,这些api是直观的,并且在许多版本和许多年里都能保持。
  • 代码质量制定高标准:Spring框架非常强调有意义的、当前的和准确的Javadoc。它是为数不多的几个能够声称干净的代码结构,并且在包之间没有循环依赖关系的项目之一。

  从上面几点指导性原则可以看出,Spring设计的最大特点就是面向接口编程,而面向接口编程本就是所有框架设计的核心。

架构

  SpringFramework项目庞大,为了便于维护与使用,它被设计为许多高度解耦合的模块,开发者可以根据自己的需要选择某些模块。
  SpringFramework5与SpringFramework4在模块划分上发生了较大的变化,主要体现在SpringFramework5添加了WebReactive模块,以更好地满足WEB的响应式编程。模块划分的变化在很大程度上体现的是设计思想的变化。

  左图取自SpringFramework4的官方文档,右图为本座根据SpringFramework5的文档结构自行绘制的架构图(在SpringFramework5的官方文档中没有现成的架构图)。下面对SpringFramework5各个模块的作用做一个简单的介绍:

  • Core:Spring框架的核心,提供对Bean的管理及其功能的扩展
  • DataAccess:数据访问的管理,包括事务、ORM等
  • Integration:提供了其他常用组件的集成方案
  • WebServlet:spring提供的web开发框架
  • WebReactive:spring提供的响应式web开发框架
  • Test:测试相关功能
  • Languages:提供可以运行在JVM之上的其他语言的支持

依赖包

  在Java项目中,如果需要使用Spring提供的功能,必须引入相应的jar包,而Spring根据功能的不同划分出多个jar包,开发者可以根据自己的需要引入相应的jar包即可。
  Spring的jar包主要有两种,一种实现了完整的模块功能,另一种只提供了模块框架让Spring容器或开发者调用,而具体的实现需要引入第三方包(如果第三方包不是基于该spring框架开发的,还需要引入适配器),这很像SPI机制,如Spring的orm框架整合mybatis,首先需要引入spring-orm.jar以提供spring对orm框架的支持,然后需要引入mybatis.jar以提供mybatis的功能,最后还需要提供spring-mybatis.jar以实现两者的适配。
SpringFramwork包结构图

  • core:核心功能所需jar包,几乎所有其他功能都是建立在该功能之上的,所以是必不可少的
    • spring-core:定义了一些基本概念并提供了一些基本工具,如资源加载、cglib代理功能等,这些工具既可以供Spring的其他模块使用,也可以供编程者直接使用
    • spring-expression:提供spring表达式(SpEL)的支持
    • spring-beans:最基本的容器管理工能,提供BeanFactory
    • spring-context:在spring-beans容器的基础上进行了功能扩展,提供ApplicationContext,实际项目中使用的容器几乎都是基于ApplicationContext
    • spring-context-support:对整合第三方的缓存、任务计划、邮件服务等框架提供支持
  • aop:面向切面编程
    • spring-aop:Spring提供的对面向切面的支持
    • spring-aspects:整合了aspectj的编程风格,但底层依然基于spring-aop而非aspectj方式来实现面向切面功能
  • data:数据库相关
    • spring-jdbc:spring提供的对原生jdbc的进一步抽象,让数据库操作更方便
    • spring-tx:spring提供的事务管理
    • spring-orm:对整合第三方的orm(对象关系映射)框架提供支持
    • spring-oxm:对整合第三方的oxm(对象XML映射)框架提供支持
  • web:web编程支持
    • spring-web:提供基本的web功能,无论是spring-webmvc或者structs集成spring都需要依赖此包
    • spring-webmvc:基于spring-web提供了mvc框架
    • spring-webflux:基于响应式编程的web框架
    • spring-websocket:提供对websocket的支持
  • 其他:
    • spring-jms:对整合第三方的JMS(Java消息服务)协议实现提供支持。JMS是实现消息队列的一种协议(协议就是一种规范,实现消息队列还可以有其他协议,如AMQP,整合基于AMQP协议的消息队列需要的不是spring-jms包而是spring-amqp),ActiveMq、Redis基于JMS协议,RabbitMq基于AMQP协议。
    • spring-test:测试相关
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值