初识Spring

162 阅读4分钟

一、Spring 是什么

Spring是一个JEE开发框架,开源,轻量级,功能强大。

JEE – Java Enterprise Edition/Java企业版: 主要用于开发企业软件的Java版本。企业软件例子:会计软件、帐单管理、业务流程管理、CMS、CRM、ERP等。

二、Spring相关概念

2.1 Spring家族

  • 官网:spring.io,从官网我们可以大概了解到:

    • Spring能做什么:用以开发web、微服务以及分布式系统等,光这三块就已经占了JavaEE开发的九成多。
    • Spring并不是单一的一个技术,而是一个大家族,可以从官网的Projects中查看其包含的所有技术。
  • Spring发展到今天已经形成了一种开发的生态圈,Spring提供了若干个项目,每个项目用于完成特定的功能。

    • Spring已形成了完整的生态圈,也就是说我们可以完全使用Spring技术完成整个项目的构建、设计与开发。
    • Spring有若干个项目,可以根据需要自行选择,把这些个项目组合起来,起了一个名称叫【全家桶】,如下图所示 image-20210729171850181.png 说明: 图中的图标都代表什么含义,可以进入https://spring.io/projects网站进行对比查看。 这些技术并不是所有的都需要学习,额外需要重点关注Spring FrameworkSpringBootSpringCloud: 1629714811435.png
    • Spring Framework:Spring框架,是Spring中最早最核心的技术,也是所有其他技术的基础。
    • SpringBoot:Spring是来简化开发,而SpringBoot是来帮助Spring在简化的基础上能更快速进行开发。
    • SpringCloud:这个是用来做分布式之微服务架构的相关开发。

    除了上面的这三个技术外,还有很多其他的技术,也比较流行,如SpringData,SpringSecurity等,这些都可以被应用在我们的项目中。我们今天所学习的Spring其实指的是【Spring Framework】。

2.2 Spring系统架构

通常我们说spring指的是Spring Framework,那么它的框架是怎么样的呢?

以下是spring的系统架构图:

1629720945720.png (1)核心层

  • Core Container:核心容器,这个模块是Spring最核心的模块,其他的都需要依赖该模块。(容器,就是用来装东西的,装什么呢?在Java中就是用来装对象。使用容器层对项目中的对象进行统一管理)

(2)AOP层

  • AOP:面向切面编程,它依赖核心层容器,目的是在不改变原有代码的前提下对其进行功能增强
  • Aspects:AOP是思想,Aspects是对AOP思想的具体实现。Spring-aspects 用来集成AspectJ框架,AspectJ是一个强大的AOP框架,Spring发现其已经做的很好了,所以大胆地将其收录到Spring技术栈。但是也请注意Spring中的AOP实现与AspectsJ的底层实现是有不一样的。

(3)数据层

  • Data Access:数据访问,Spring全家桶中有对数据访问的具体实现技术
  • Data Integration:数据集成,Spring支持整合其他的数据层解决方案,比如Mybatis
  • Transactions:事务,Spring中事务管理是Spring AOP的一个具体实现。

(4)Web层

  • Spring为web层开发提供的一整套完备的解决方案。 提供了基于Spring的Web服务的基础架构,包括核心的HTTP集成、Servlet过滤器、Spring HTTP Invoker等。它还支持与其他Web框架和HTTP技术(如Hessian、Burlap)的集成。

    Spring提供了两个Web框架:Spring Web MVC和Spring WebFlux。最新的5.x版本中右面的portlet组件已经被废弃掉,同时增加了用于异步响应式处理的WebFlux组件。

    Spring Web MVC是最初包含在Spring框架中的Web框架,是Spring MVC的一个实现,专为Servlet API和Servlet容器设计。它依赖于Spring Web,并在此基础上增加了对Spring MVC的支持,包括RESTful协议、国际化等模块。后来添加的Spring WebFlux是一个响应式堆栈的Web框架。

    Web MVC和WebFlux可以共存,并作为可选模块工作,因此可以根据应用程序的要求使用其中一个或两个都不使用。

(5)Test层

  • 该模块主要为测试提供支持的,通过 JUnit 和 TestNG 组件支持单元测试和集成测试。

更具体可参看博客:www.cnblogs.com/tanghaorong…