Spring基础知识(1)- Spring简介、Spring体系结构和开发环境配置

 

注:开始阅读 Spring 基础知识系列文章之前,读者应该已经掌握了 Java 基础知识。另外,本系列文章中的所有实例都是使用 IntelliJ IDEA + Apache Maven 配置和编译的,所以还需要对 IntelliJ IDEA 和 Apache Maven 有基本的了解。

 

1. Spring 简介

Spring 是 Java EE (Java Platform Enterprise Edition,Java EE 是 J2EE的一个新的名称,) 编程领域的一款轻量级的开源框架,由被称为 “Spring 之父” 的 Rod Johnson 于 2002 年提出并创立,它的目标就是要简化 Java 企业级应用程序的开发难度和周期。

Spring 自诞生以来备受青睐,一直被广大开发人员作为 Java 企业级应用程序开发的首选。时至今日,Spring 俨然成为了 Java EE 代名词,成为了构建 Java EE 应用的事实标准。

    1) Spring 的诞生与发展

        早期的 J2EE(Java EE 平台)推崇以 EJB 为核心的开发方式,但这种开发方式在实际的开发过程中存在种种弊端,例如使用复杂、代码臃肿、代码侵入性强、开发周期长、移植难度大等。

        Rod Johnson 在其 2002 年编著的畅销书《Expert One-on-One J2EE Design and Development》中,针对 EJB 各种臃肿的结构进行了逐一的分析和否定,并分别以更加简洁的方式进行了替换。

        在这本书中,Rod Johnson 通过一个包含 3 万行代码的附件,展示了如何在不使用 EJB 的情况下构建一个高质量、可扩展的 Java 应用程序。在这个附件中,Rod Johnson 编写了上万行基础结构代码,其中包含了许多可重用的 Java 接口和类,例如 ApplicationContext、BeanFactory 等。这些类的根包被命名为 com.interface21,含义为:这是提供给 21 世纪的一个参考。

        这本书影响甚远,后来 Rod Johnson 将 com.interface21 的代码开源,并把这个新框架并命名为“Spring”,含义为:Spring 像一缕春风一样,扫平传统 J2EE 的寒冬。

        2003 年 2 月,Spring 0.9 版本发布,它采用了 Apache 2.0 开源协议;2004 年 4 月,Spring 1.0 版本正式发布。到目前为止,Spring 已经步入到了第 5 个大版本,也就是我们常说的 Spring 5。


    2) Spring 的狭义和广义

        在不同的语境中,Spring 所代表的含义是不同的。下面我们就分别从“广义”和“狭义”两个角度,对 Spring 进行介绍。

    (1) 广义的 Spring:Spring 技术栈

            广义上的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈。

            经过十多年的发展,Spring 已经不再是一个单纯的应用框架,而是逐渐发展成为一个由多个不同子项目(模块)组成的成熟技术,例如 Spring Framework、Spring MVC、SpringBoot、Spring Cloud、Spring Data、Spring Security 等,其中 Spring Framework 是其他子项目的基础。

项目 描述
Spring Data Spring提供的数据访问模块,对 JDBC 和 ORM 提供了很好的支持。通过它,开发人员可以使用一种相对统一的方式,来访问位于不同类型数据库中的数据。
Spring Batch 专门针对企业级系统中的日常批处理任务的轻量级框架,能够帮助开发人员方便的开发出健壮、高效的批处理应用程序。
Spring Security 前身为 Acegi,是 Spring 中较成熟的子模块之一。它是一款可以定制化的身份验证和访问控制框架。
Spring MVC 基于 MVC 设计模式的轻量级 Web 开发框架,本质上相当于 Servlet。
Spring Mobile 是对 Spring MVC 的扩展,用来简化移动端 Web 应用的开发。
Spring Boot 是 Spring 团队提供的全新框架,它为 Spring 以及第三方库一些开箱即用的配置,可以简化 Spring 应用的搭建及开发过程。
Spring Cloud 基于 Spring Boot 实现的微服务框架。它将市面上成熟的、经过验证的微服务框架整合起来,并通过 Spring Boot 的思想进行再封装的一套简单易懂、易部署和易维护的分布式系统开发工具包。


        (2) 狭义的 Spring:Spring Framework

            狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。

            Spring 框架是一个分层的、面向切面的 Java 应用程序的一站式轻量级解决方案,它是 Spring 技术栈的核心和基础,是为了解决企业级应用开发的复杂性而创建的。

            Spring 有两个核心部分: IoC 和 AOP。

项目 描述
IoC Inverse of Control 的简写,译为“控制反转”,指把创建对象过程交给 Spring 进行管理。
AOP Aspect Oriented Programming 的简写,译为“面向切面编程”。


            AOP 用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP 还解决一些系统层面上的问题,比如日志、事务、权限等。

        (3) Spring Framework 的特点

            a) 方便解耦,简化开发

                Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。

            b) 方便集成各种优秀框架

                Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。

            c) 降低 Java EE API 的使用难度

                Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。

            d) 方便程序的测试

                Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。

            e) AOP 编程的支持

                Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。

            f) 声明式事务的支持

                只需要通过配置就可以完成对事务的管理,而无须手动编程。

2. Spring 体系结构

  1) Core Container(Spring 的核心容器)

模块 描述
Beans 模块 提供了框架的基础部分,包括控制反转和依赖注入。
Core 核心模块 封装了 Spring 框架的底层部分,包括资源访问、类型转换及一些常用工具类。
Context 上下文模块 建立在 Core 和 Beans 模块的基础之上,集成 Beans 模块功能并添加资源绑定、数据验证、国际化、Java EE 支持、容器生命周期、事件传播等。ApplicationContext 接口是上下文模块的焦点。
SpEL 模块 提供了强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从 Spring 容器获取 Bean,它也支持列表投影、选择和一般的列表聚合等。


  2) AOP、Aspects、Instrumentation 和 Messaging

模块 描述
AOP 模块 提供了面向切面编程实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术,并且能动态的把这些功能添加到需要的代码中,这样各司其职,降低业务逻辑和通用功能的耦合。
Aspects 模块 提供与 AspectJ 的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。
Instrumentation 模块 提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
Messaging 模块 Spring 4.0 以后新增了消息(Spring-messaging)模块,该模块提供了对消息传递体系结构和协议的支持。


  3) Data Access/Integration(数据访问/集成)

模块 描述
JDBC 模块 提供了一个 JBDC 的样例模板,使用这些模板能消除传统冗长的 JDBC 编码还有必须的事务控制,而且能享受到 Spring 管理事务的好处。
ORM 模块 提供与流行的“对象-关系”映射框架无缝集成的 API,包括 JPA、JDO、Hibernate 和 MyBatis 等。而且还可以使用 Spring 事务管理,无需额外控制事务。
OXM 模块 提供了一个支持 Object /XML 映射的抽象层实现,如 JAXB、Castor、XMLBeans、JiBX 和 XStream。将 Java 对象映射成 XML 数据,或者将XML 数据映射成 Java 对象。
JMS 模块 指 Java 消息服务,提供一套 “消息生产者、消息消费者”模板用于更加简单的使用 JMS,JMS 用于用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。
Transactions 事务模块 支持编程和声明式事务管理。


  4) Web 模块

模块 描述
Web 模块 提供了基本的 Web 开发集成特性,例如多文件上传功能、使用的 Servlet 监听器的 IOC 容器初始化以及 Web 应用上下文。
Servlet 模块 提供了一个 Spring MVC Web 框架实现。Spring MVC 框架提供了基于注解的请求资源注入、更简单的数据绑定、数据验证等及一套非常易用的 JSP 标签,完全无缝与 Spring 其他技术协作。
WebSocket 模块 提供了简单的接口,用户只要实现响应的接口就可以快速的搭建 WebSocket Server,从而实现双向通讯。
Portlet 模块 提供了在 Portlet 环境中使用 MVC 实现,类似 Web-Servlet 模块的功能。


  5) Test 模块

        Test 模块:Spring 支持 Junit 和 TestNG 测试框架,而且还额外提供了一些基于 Spring 的测试功能,比如在测试 Web 框架时,模拟 Http 请求的功能。

3. Spring 开发环境配置

    1) 系统要求

        (1) 基础要求
    
            硬件:台式机或笔记本电脑,内存在 2G 以上,CPU 尽量 I3 以上(或其它CPU同等配置)
            操作系统:Windows XP/7/8/10/11、MacOS或Linux等桌面系统(达到WinXP性能以上)
            代码编辑器:Visual Studio Code,Sublime Text,Ultra Edit,Notepad 等(有些需要付费)。
            Java JDK: 8 以上版本

        (2) 扩展要求(提高开发效率,降低开发难度)

            a) Apache Maven:

                Apache Maven 是一款基于 Java 平台的项目管理和整合工具,它将项目的开发和管理过程抽象成一个项目对象模型(POM)。开发人员只需要做一些简单的配置,Maven 就可以自动完成项目的编译、测试、打包、发布以及部署等工作。

                官方网址:https://maven.apache.org/

            b) Eclipse IDE for Enterprise Java and Web Developers:

                面向使用 Java 和 Web 应用程序的开发人员的工具,包括Java IDE、JavaScript工具、TypeScript、JavaServer 页面和界面、Yaml、Markdown、Web服务、JPA和数据工具、Maven和Gradle、Git等。

                官方网址:https://www.eclipse.org/

            c) IntelliJ IDEA Community Edition (简称 IDEA,Ultimate版是付费的):

                IntelliJ IDEA Community Edition 是 IntelliJ IDEA的一个开源版本。 支持Java、XML和Groovy代码,支持 Ant和Maven 等构建工具,集成JUnit和TestNG测试框架,集成CVS、Subversion和git版本控制系统。

                官方网址:https://www.jetbrains.com/idea/

            *注:本文主要讨论 Maven + IDEA 组合的 Spring 开发环境。                

 

    2) Windows 下配置环境

        Windows版本 : Windows 10 Home (20H2)

        (1) Java/JDK 安装

            a) 下载 JDK
        
                https://www.oracle.com/java/technologies/downloads/
                
                下载 Windows 版的 Java 8+ 的 *.exe 文件,默认安装后,假设安装目录是 C:\Program Files (x86)\Java\jdk8.0.1。

            b) 配置环境变量
        
                右击“我的电脑” → “属性” → “高级系统设置” → “高级” → “环境变量”

                新建系统变量(点击“系统变量”下方的“新建”按钮,填写变量名与变量值,点击“确定”)

                    JAVA_HOME = C:\Program Files (x86)\Java\jdk8.0.1
                    CLASSPATH = .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

                编辑系统变量 Path (PATH)

                    Path = ... ;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

                查看Java版本,运行如下命令:
                
                   c:\> java -version

        (2) Apache Maven 配置

            https://archive.apache.org/dist/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.zip

            下载后解压缩,无需安装,只需配置。假设 Maven 相关的目录如下:

                Maven 目录: C:\Applications\java\apache-maven-3.8.1
                本地 Maven 仓库: C:\Applications\java\maven-repository

            a) 配置环境变量

                右击“我的电脑” → “属性” → “高级系统设置” → “高级” → “环境变量”

                新建系统变量(点击“系统变量”下方的“新建”按钮,填写变量名与变量值,点击“确定”)

                    MAVEN_HOME = C:\Applications\java\apache-maven-3.8.1

                编辑系统变量 Path (PATH)

                    Path = ... ;%MAVEN_HOME%\bin;

            b) 修改成阿里源

                修改 C:\Applications\java\apache-maven-3.8.1\conf\settings.xml

                  ...

                  # 修改本地仓库路径
                  <localRepository>C:\Applications\java\maven-repository</localRepository>

                  ...

                  # 修改成阿里源
                  <mirror>
                      <id>alimaven</id>
                      <name>aliyun maven</name>
                      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                      <mirrorOf>central</mirrorOf>       
                  </mirror>

        (3) IntelliJ IDEA Community Edition 安装

            https://www.jetbrains.com/idea/download/

            下载的 *.exe 文件,默认安装后,运行。

            配置 Maven:

                菜单 File -> Settings -> Build, Execution, Deployment -> Build Tools -> Maven

                    Maven home path: C:\Applications\java\apache-maven-3.8.1
                    User settings file: C:\Applications\java\apache-maven-3.8.1\conf\settings.xml
                    Local repository: C:\Applications\java\maven-repository

        (4) XAMPP for Windows 安装

            https://www.apachefriends.org/download.html

            本文安装版本 7.4.25,用到 XAMPP 的如下功能:

                + Apache 2.4.51
                + MariaDB 10.4.21 (MySQL的分支)
                + PHP 7.4.25 (VC15 X86 64bit thread safe) + PEAR
                + phpMyAdmin 5.1.1

 

    3) macOS 下配置环境

        macOS版本 : macOS High Sierra (Version: 10.13.6)

        (1) Java/JDK 安装

            a) 下载 JDK

                https://www.oracle.com/java/technologies/downloads/
                
                下载 macOS 版 Java 8+ 的 *.dmg 文件,双击安装。

                运行 "/usr/libexec/java_home -V" 查看 Java 目录,查到的目录如下:

                    /Users/xxx/Library/Java/JavaVirtualMachines/corretto-1.8.0_302/Contents/Home

                    *注:路径中的 xxx 是当前的macOS用户名,下同。

            b) 设置 JAVA_HOME

                修改系统配置文件 /etc/profile (也可修改当前用户的 ~/.bash_profile,下同)

                    $ sudo vi /etc/profile

                        JAVA_HOME=/Users/xxx/Library/Java/JavaVirtualMachines/corretto-1.8.0_302/Contents/Home
                        JRE_HOME=$JAVA_HOME/jre
                        CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
                        PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
                        export JAVA_HOME JRE_HOME CLASS_PATH PATH

                    $ source /etc/profile
                    $ echo $JAVA_HOME

                查看Java版本,运行如下命令:

                    $ java -version

        (2) Apache Maven 配置

            下载:https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz

            下载后解压缩,无需安装,只需配置。假设 Maven 相关的目录如下:

                Maven 目录: /Users/xxx/Applications/Java/apache-maven-3.8.1
                本地 Maven 仓库: /Users/xxx/Applications/maven-repository

            a) 配置环境变量

                修改系统配置文件 /etc/profile

                    $ sudo vim /etc/profile

                        ...
                        MAVEN_HOME=/Users/xxx/Applications/Java/apache-maven-3.8.1
                        CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
                        PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$MAVEN_HOME/bin
                        export JAVA_HOME JRE_HOME MAVEN_HOME CLASS_PATH PATH
                    
                    $ source /etc/profile
                    $ echo $MAVEN_HOME

             b) 修改成阿里源

                修改 /Users/xxx/Applications/Java/apache-maven-3.8.1/conf/settings.xml

                  ...

                  # 修改本地仓库路径
                  <localRepository>/Users/xxx/Applications/maven-repository</localRepository>

                  ...

                  # 修改成阿里源
                  <mirror>
                      <id>alimaven</id>
                      <name>aliyun maven</name>
                      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                      <mirrorOf>central</mirrorOf>       
                  </mirror>           

       (3) IntelliJ IDEA Community Edition 安装

            https://www.jetbrains.com/idea/download/

            下载的 *.dmg 文件,默认安装后,运行。

            配置 Maven:

                IntelliJ IDEA -> Preferences -> Build, Execution, Deployment -> Build Tools -> Maven

                    Maven home path: /Users/xxx/Applications/Java/apache-maven-3.8.1
                    User settings file: /Users/xxx/Applications/Java/apache-maven-3.8.1/conf/settings.xml
                    Local repository: /Users/xxx/Applications/maven-repository

        (4) XAMPP for macOS 安装

            https://www.apachefriends.org/download.html

            本文安装版本 7.4.25,用到 XAMPP 的如下功能:

                + Apache 2.4.51
                + MariaDB 10.4.21 (MySQL的分支)
                + PHP 7.4.25 (VC15 X86 64bit thread safe) + PEAR
                + phpMyAdmin 5.1.1


    4) Linux 下配置环境

        Linux版本:Ubuntu 18.04

        (1) Java/JDK 安装

                a) 安装 Java

        # Ubuntu 18.04 使用如下命令

                              $ sudo apt-get update
                              $ sudo apt-get install openjdk-8-jdk

        # CentOS 7.9 使用如下命令 

               $ yum search java | grep jdk # 查看可安装的 Java
               $ sudo yum install -y java-1.8.0-openjdk-devel.x86_64

                        $ java -version

                                openjdk version "1.8.0_275"
                                OpenJDK Runtime Environment (build 1.8.0_275-8u275-b01-0ubuntu1~18.04-b01)
                                OpenJDK 64-Bit Server VM (build 25.275-b01, mixed mode)

                        $ update-alternatives --config java

                                 There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

                        注:update-alternatives --config java 命令的输出结果,显示 java 的所在目录是  /usr/lib/jvm/java-8-openjdk-amd64 。

                 b) 设置 JAVA_HOME

         修改系统配置文件 /etc/profile (也可修改当前用户的 ~/.bash_profile,下同)

                         $ sudo vi /etc/profile

                              JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
                              JRE_HOME=$JAVA_HOME/jre
                              CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
                              PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
                              export JAVA_HOME JRE_HOME CLASS_PATH PATH

                        $ source /etc/profile
                        $ echo $JAVA_HOME

                              /usr/lib/jvm/java-8-openjdk-amd64

        (2) Apache Maven 配置

            参考 macOS 下 Maven 配置

        (3) IntelliJ IDEA Community Edition

            略

        (4) XAMPP for Linux
        
            略

 

4. Spring 相关的网站

    Spring:https://spring.io/
    Spring Initializr: https://start.spring.io/

    Maven:https://maven.apache.org/
    Maven Repository:https://mvnrepository.com/

    Java Standard Edition 8 API:https://docs.oracle.com/javase/8/docs/api/
    Tomcat:https://tomcat.apache.org/
    JMeter:https://jmeter.apache.org/

 


本系列文章资料参考来源:

1. http://c.biancheng.net/spring/

2. https://www.w3cschool.cn/wkspring/

3. http://www.tutorialspoint.com/spring/spring_overview.htm

4. https://docs.spring.io/spring-framework/docs/4.3.9.RELEASE/spring-framework-reference/html/

 

posted @ 2022-03-03 20:14  垄山小站  阅读(421)  评论(0编辑  收藏  举报