Spring模块化设计:Spring功能特性如何在不同模块中组织?

2020-10-27 18:50:48 浏览数 (1)

Spring的模块化设计和Java 9 的模块化设计不是对等的,不过Spring 的模块化确实可以运用到Java 9 的模块化里面去 ,那是为什么呢,那是因为在Spring 的某个版本开始,它将它的模块划分为更细粒的Jar 包,这些Jar包可以按需应用分配的方式来依次依赖,比如它的核心模块Spring-core,或者Spring-JDBC或者Spring-context这些模块,按照完全统计目前已经有了大概有20多个模块

Spring Framework 中这些模块也是各司其职,然后各取所需的状态,我们在使用Spring Framework 的时候也不一定用到所有模块全部依赖进来,这和它以往最早的版本来说,它的状态是不一样的,最早的时候是把所有的东西放在一起,包括我们所说的interface21

下面是官网的模块截图

下面主要是针对Spring Framework 中的模块做简单的说明「白话讲解说明」

  • Spring-aop AOP 顾名思义就是面向接口编程
  • Spring-aspects aspects 其实就是Spring 对 aspects 的一个支持
  • Spring-beans & Spring-context Spring-beans和Spring-context都是需要通过Spring-core 来进行支持的,Spring-core 就包含了一些关于Java语法特性的支持 以及林林总总
  • Spring-expression 我们常说的就是Spring的表达式语言 ,Spring 表达式语言是从Spring3开始引入,它类似于JSP里面的EL语言(功能也是非常强大,前段时候做公式服务的时候主要核心技术就是利用Spring-expression表达式语言,后续有机会可以开详细介绍)
  • Spring-instrument spring-instrument 是Spring 2开始对我们Java的装配 ,这个装配简单点讲就是java 的agent的一个支持
  • Spring-jcl spring-jcl 是一个新模块,这个模块是从spring5开始支持,那么为什么Spring 要引用这个模块呢?因为我们知道过去运用过另一个模块,叫commons-logging,commons-logging 统一了Java的logging,就是Java 日志和log4j这个日志,那么Java logging后又出现了LogBack,LogBack是一个新型的日志框架,LogBack用到算了SL4J,SL4J就相当于说又把Java Logging和LogBack进行统一,Spring 为了解决这个情况自己研发了 一套新型的日志框架Spring-JcL,Spring-JcL就会帮Spring统一它的日志管理,我们都知道Spring 过去都是通过commons-logging 来进行日志管理这样,Spring 的支持就会依赖外面的API ,由于外部的API不断在变化 ,所以这里采用统一的方式进行处理和维护
  • Spring-JDBC spring-jdbc顾名思义就是spring 对jdbc的一个整合这里就不做过多的阐述
  • Spring-JMS JMS其实就是Java Service Message 的一个缩写,Java 的一个消息服务,这里可以对应的比如说Apache 的 Apache MQ 或者其他传统Java EE 的消息中间件 ,这部分内容只针对我们JMS的规范来进行实施的,因此它会利用到大量的JMS的API来进行实现
  • Spring-message Message 模块其实就是Spring 相对消息模块进行统一化管理,那么包括我们所说的JMS包括了 Kafka、RocketMQ、或者RabbitMQ 它都会有一个统一实现的标准,这个message和JMS有些一样,JMS过去就是希望通过统一套标准的API来统一比如说MQ或者是说w blogic MQ或者是websphere MQ的实现,那么Spring 的野心更大,它希望通过它自己的API来帮助大家实现一个最简单或者说最好用的API体验
  • Spring-orm orm就是我们比如Hibernate、JPA这种东西的一个整合,这个应该都比较熟悉
  • Spring-oxm oxm简单讲就是XML的编列 ,也就是说就是说XML的序列化和反序列化,这个是一个新的模块,Spring进行单独维护
  • Spring-test 顾名思义就是Spring的一个测试,包含了Mock对象、包括test-context比如测试上下文和test-web测试,因此通常我们引用它来说,比如:Maven里面它的scope就是test scope它就是在测试场景下特殊实现,因此不需要把它引入到你日常开发中去
  • Spring-tx tx 是 transtraction的缩写就是我们常说的Spring的事务抽象,这个对于学习Java的码友是重点也是难点的一块,那么Spring的事务抽象一则基本上借鉴了JDBC的事务实现以及Java EE 尤其是 EJB的事务实现做了一个统一的封装(Spring Framework 框架来源是基于它的作者 Rod Johnson 写过一本书就是 开发Java EE without EJB,就是不用EJB来实现 Java EE,里面讲到一个重要特点就是由于事务重现,比如测试性或者可易用性一定要依赖某个容器,所以方便度肯定不高,所以Spring提出一个tx方便我们来使用 )

下面4个部分主要是Web部分

web 、webflux、webmvc以及websocket,为什么Web要分为四个模块来进行呈现?其实问题很简单,因为spring 还想做个统一,它想做什么呢!其实在Java EE web实现也有两个实现,一个是传统的Servlet API 实现就是基于底层API接口的实现 ,另外一个方面就是JAX-RS ,什么是JAX-RS 就是Java 标准的注解的方式来驱动开发RESTful服务,Spring也是基础它们基础来开发spring-webmvc和spring-webflux ,所以你会看到Spring-webmvc和Spring-webflux里面的注解和JAX-RS的注解特别像

上面20多个模块 19个模块可以用于我们日常开发一个可用于日常测试使用

总结

通过上面的20个模块的简单分析,我们可以看出Spring目前开始把功能精细化,就是说如果我想需要Spring的某些特性,只需要增加对某个模块的依赖,这些模块可以做到按需分配

0 人点赞