当前位置: 首页 > news >正文

SpringBoot-1-入门概念介绍和第一个Spring Boot项目

文章目录

  • 1 开发JAVA EE应用
    • 1.1 EJB
    • 1.2 Spring框架
      • 1.2.1 IoC(Inversion of Control)控制反转
      • 1.2.2 DI(Dependency Injection)依赖注入
      • 1.2.3 AOP面向切面编程
    • 1.3 Spring Boot
    • 1.4 Spring Cloud框架
    • 1.5 开发工具
  • 2 创建Spring Boot项目
    • 2.1 在线项目生成向导
    • 2.2 使用IDEA导入项目
    • 2.3 Spring Boot项目基本结构
      • 2.3.1 .idea目录
      • 2.3.2 .mvn目录
      • 2.3.3 src目录
      • 2.3.4 .gitignore文件
    • 2.4 pom.xml文件
      • 2.4.1 pom.xml文件头信息
      • 2.4.2 项目基本信息
      • 2.4.3 项目依赖项信息
      • 2.4.4 项目公共属性
      • 2.4.5 项目构建相关配置
    • 2.5 运行第一个项目
      • 2.5.1 创建HelloController类
      • 2.5.2 运行项目
  • 3 附录
    • 3.1 错误及解决
    • 3.2 参考附录

开发JAVA EE应用的方式从EJB到Spring框架,再到SpringBoot,再到SpringCloud。介绍SpringBoot项目基本结构、pom.xml文件的结构,创建并运行第一个SpringBoot项目。

1 开发JAVA EE应用

其实简单的理解Spring Boot可以认为是“约定配置好一批默认参数的”Spring框架.
在这里插入图片描述

1.1 EJB

在Spring出现之前曾开发JAVA EE应用时采用EJB(Enterprise JavaBean)开发,EJB的入门理解难度较高,开始的学习和应用非常的艰苦。

EJB要严格地实现各种不同类型的接口,类似的或者重复的代码大量存在。而配置也是复杂和单调,进行对象查找的代码也是单调而枯燥。

虽然有一些开发工作随着xdoclet的出现,而有所缓解,但是学习EJB的高昂代价,和极低的开发效率,极高的资源消耗,都造成了EJB的使用困难。

而Spring出现的初衷就是为了解决类似的这些问题。

1.2 Spring框架

Spring其实是一个提供了更完善开发环境的一个框架,可以为POJO(Plain Ordinary Java Object)对象提供企业级的服务。

其核心是控制反转(Inversion of Control, Ioc)和面向切面编程(Aspect Oriented Programming,AOP),Spring在这两大核心功能上不断发展,最终成为了企业JAVA开发领域的实际统治者。

1.2.1 IoC(Inversion of Control)控制反转

如何理解“控制反转”呢?
首先我们需要知道反转的是什么,是由谁来控制。

Spring框架出现之前,在JAVA面向对象的开发中,开发者需要通过new关键字完成对Object的创建。

Spring框架诞生后,是通过Spring容器来管理对象的,因此Object的创建是通过Spring来完成的。

注意看这里控制对象的主体变化了,由开发者变成了Spring容器,所以控制反转指的是由开发者来控制创建对象变成了由Spring容器来控制创建对象,创建对象和销毁对象的过程都由Spring来控制。

这就是控制反转,另外我们还可以推论出以Spring框架为开发基础的应用尽量不要自己创建对象,应全部交由Spring容器管理。

1.2.2 DI(Dependency Injection)依赖注入

在JAVA程序中,类与类之间的耦合非常频繁,如Class A需要依赖Class B的对象b,Class B又需要依赖Class C。

而基于Spring框架的开发,在Class A中不需要显式地使用new关键字新建一个对象b,只需在对象b的声明之上加一行注解@Autowired,这样在Class A用到b时,Spring容器会主动完成对象b的创建和注入。这就是Class A依赖Spring容器的注入。

通过上面的分析,我们可以发现IoC和DI其实是同一概念从不同角度的理解。

1.2.3 AOP面向切面编程

AOP(Aspect Oriented Programming)面向切面编程,简单的说就是在代码执行过程中,动态嵌入其他代码,AOP实际是面向对象编程的一种完善和补充。

是一种可以通过预编译方式和运行其动态代理实现在不修改源代码的情况下给程序动态统一添加某种特定功能的技术。

1.3 Spring Boot

Spring Boot是在Spring的基础上为了简化Spring应用的创建、运行、调试、部署,它将目前各种比较成熟的服务框架和第三方组件组合起来,按照“约定优于配置”的设计思想进行封装,屏蔽掉复杂的配置和实现,最终给开发者提供一套简单、易用、易维护的企业级JAVA系统开发工具包,让开发者更容易地使用Spring。

其最大的价值是“简化”,让Spring更加方便的使用,可以认为是一套预先配置好的开箱即可用的Spring 框架。

1.4 Spring Cloud框架

Spring Cloud又是什么呢?

大家是否发现近些年来微服务开发思想在企业开发领域大行其道,有点万物皆要“微服务化”的趋势。

但是微服务开发带来了好处的同时也引入了麻烦,项目采用了微服务架构之后,会出现非常多的微服务,特别是大型项目,微服务数目可能多得数不过来,这就引发了一个新的问题:如何管理这些微服务?

Spring Cloud就是一套分布式微服务治理框架,可以说是这些微服务的中央管理系统。Spring Cloud提供了各种组件和方案来治理与维护整个微服务系统,比如服务之间的通信、熔断、监控等。

Spring Cloud利用Spring Boot的集成了一系列开源组件,在微服务架构中对外提供了一套服务治理的解决方案。

1.5 开发工具

IntelliJ IDEA公认最好的Java开发工具。
在这里插入图片描述
IDEA是JetBrains公司的产品,我们可以在官网下载。Intellij IDEA有Community和Ultimate两个版本,Community为免费版,Ultimate为收费版,区别就是Ultimate可以开发web项目。

JDK和MAVEN的安装就不再赘述了。

2 创建Spring Boot项目

创建Spring Boot项目一般有两种方法,一种是使用Spring官网提供的在线项目生成向导生成,另一种是使用Intellij IDEA自带的Spring项目生成向导生成。

2.1 在线项目生成向导

在Project 中选择Maven Project,编程语言Language中选择Java,Spring Boot版本使用默认选项即可。

Project Metadata中Group为组织机构,一般按com.组织机构名填写,这里填写了com.zb, 选项Artifact代表子项目名demo,Name代表具体项目名称这里我们填写helloworld,描述信息Description请随意填写,Package name会自动生成。

填写完毕基本参数之后,点击Generate创建并下载项目压缩包。
在这里插入图片描述
解压,其中文件目录如下:
在这里插入图片描述

2.2 使用IDEA导入项目

当IDEA下载完相关依赖文件之后会出现类似如下的项目结构。
在这里插入图片描述

2.3 Spring Boot项目基本结构

2.3.1 .idea目录

.idea目录,这个目录其实不属于Spring Boot项目,.idea目录是存储IntelliJ IDEA项目的配置信息,主要内容有IntelliJ IDEA项目本身的一些编译配置、文件编码信息、jar包的数据源和相关的插件配置信息。

2.3.2 .mvn目录

在这里插入图片描述
maven-wrapper主要有两个用处:
(1)可以为某个Java工程指定特定Maven版本,避免因为Maven版本差异引起的环境错误统一项目的开发环境。
(2)不再需要提前安装Maven,简化了开发环境的配置。

2.3.3 src目录

在这里插入图片描述
src目录是Spring Boot主目录。
(1)src/main/java: 是程序开发及主程序目录。
(2)src/main/resource: 存放配置文件和资源文件,例如一些项目中用到的图片、视频、音频等和项目配置文件application.properties。
(3)src/test/java: 是测试程序目录,我们在该目录下编写测试程序。

2.3.4 .gitignore文件

Git忽略文件.gitignore,我们开发过程中会产生很多中间文件或者一些只有在本地使用的文件,这些文件不需要上传到代码库中,我们可以使用.gitignore进行配置。

2.4 pom.xml文件

pom.xml文件是Maven项目中非常重要的配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.zb</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>helloworld</name><description>Demo project for Spring Boot</description><packaging>war</packaging><properties><java.version>8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><version>3.1.0</version></plugin></plugins></build></project>

2.4.1 pom.xml文件头信息

在这里插入图片描述
(1)xmlns:命名空间,类似包名,因为xml的标签可自定义,为防止自定义的标签重名,需要命名空间来进行区分。
(2)xmlns:xsi :xml遵循的标签规范。
(3)xsi:schemaLocation :用来定义xmlschema的地址,也就是xml书写时需要遵循的语法。
(4)modelVersion:声明项目描述符遵循哪一个POM模型版本。

2.4.2 项目基本信息

在这里插入图片描述
(1)groupld:组织名也是项目的包路径。
(2)artifactld: 子项目名称。
(3)version:项目版本号。
(4)packaging:一般有jar、war两个值,表示使用Maven打包时是构建成JAR包还是WAR 包,默认是jar。
(5)name:具体的项目名称。
(6)description:项目描述。

2.4.3 项目依赖项信息

Spring Boot项目依赖项信息主要分为两部分parent和dependencies两部分。
1、parent部分
在这里插入图片描述
这部分是配置父级项目的信息,这是Spring Boot的主要优点之一,将需要的依赖项打包在父项目依赖中,Maven支持项目的父子结构,引入后会默认继承父级的配置。

此项目中引入spring-boot-starter-parent定义Spring Boot的基础版本。
2、dependencies部分
在这里插入图片描述
配置项目所需要的依赖包,其中每个dependency标签代表一个依赖项,groupId是该依赖项的公司或者组织的唯一标志,artifacId是某个项目的唯一ID,一个groupId下面可能多个项目。

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency>
</dependencies>

2.4.4 项目公共属性

在这里插入图片描述
properties标签下定义了一些项目的公共属性,例如源程序文件编码格式,Java版本等等。

2.4.5 项目构建相关配置

在这里插入图片描述
build标签下面是项目构建相关配置信息,由于我们选择的是Maven构建Spring Boot项目,所以必须在中添加spring-boot-maven-plugin插件,这样项目就能以Maven的方式为应用提供Spring Boot的支持。

2.5 运行第一个项目

2.5.1 创建HelloController类

(1)在src\main\java\com\zb\demo目录上右击,选择new pacage创建一个目录。
在这里插入图片描述
(2)然后在该目录下创建HelloController类。
在这里插入图片描述
(3)随后添加/helloworld的路由地址和方法,代码如下:

package com.zb.demo.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {@RequestMapping("/helloworld")public String helloworld() {return "hello world,你好世界";}
}

创建了一个HelloController类并创建了一个helloworld()方法,
最后使用@RestController 和@RequestMapping 注解实现HTTP路由。

注解和注释很像,两者其实本质就差不多,注释是给我们程序员看的,而注解呢其实就是给程序看的,某个注解可以告诉程序要做什么事情
(1)这里的@RestController标识被它标记的这个Spring中的类HelloController可以接收HTTP请求并返回return中的数据。
(2)这里的@RequestMapping(“/helloworld”)则提供路由映射,即访问“项目地址XX/helloworld”路径的HTTP请求,都会映射到helloworld()方法上处理。

2.5.2 运行项目

接下来我们开始运行项目,在左侧项目导航中选中HelloworldApplication文件,可以看到文件中有一个注解@SpringBootApplication表面这是我们Spring项目的入口文件,点击右侧的绿色小三角形箭头,然后选择Run。
在这里插入图片描述
项目如果成功运行,在IDEA下侧的输出窗口会看到类似如下的输出,其中注意port(s):8080,这表明我们的项目在8080端口监听服务,这个接下来会使用到。
在这里插入图片描述
成功运行项目之后,我们用地址http://localhost:8080/helloworld 访问项目,出现如下图信息,则说明我们的项目运行成功了。
在这里插入图片描述

3 附录

3.1 错误及解决

1、IDEA @RequestMapping报Cannot resolve symbol RequestMapping

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

2、错误的类文件: /D:/zbMavenRepository/org/springframework/spring-web/6.2.6/spring-web-6.2.6.jar!/org/spring
错误信息显示您的类文件版本为61.0,而正确的版本应为55.0。
这个错误是由于您的项目中的Spring Boot版本与您使用的JDK版本不兼容所引起的。
JDK8

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.5</version><relativePath/> <!-- lookup parent from repository -->
</parent>

3.2 参考附录

参考第1章 Spring Boot到底是什么?
参考第2章 第一个Spring Boot项目
参考在线项目生成向导https://start.spring.io/
参考IDEA Rogstry中找不到compiler.automake.allow.when.app.running问题解决

相关文章:

  • @RequestParam 和 @RequestBody、HttpServletrequest 与HttpServletResponse
  • 计算机网络-HTTP与HTTPS
  • unigui 监听控件的js事件
  • Agent的工作原理是什么?一文详解Agent的工作原理
  • MySQL之函数
  • 高速光耦在通信行业的应用(六) | 5Mbps通信光耦的应用
  • 【图像大模型】FLUX.1-dev:深度解析与实战指南
  • 《 二级指针:解锁指针的进阶魔法》
  • 新书速览|鸿蒙HarmonyOS NEXT开发之路 卷2:从入门到应用篇
  • mes系统实施方案,mes解决方案(Word)
  • 数据中心 智慧机房解决方案
  • CS50x 01 c
  • 什么是RDMA?
  • 2025.05.19【Barplot】柱状图的多样性绘制
  • 大语言模型(LLM)本身是无状态的,怎么固化记忆
  • PyLops 使用与介绍
  • 12.2/Q1,Charls最新文章解读
  • Python中的组合数据类型
  • Keepalived相关配置和高可用
  • 深度学习基础——神经网络优化算法
  • 国家发改委:正在会同有关方面,加快构建统一规范、协同共享、科学高效的信用修复制度
  • MiniMax发布新一代语音大模型
  • 大巴车高速上撞山致2死2伤,广东肇庆警方通报
  • 两名游客刻划八达岭长城,被拘5日罚200元
  • 从良渚到三星堆:一江水串起了5000年的文明对话
  • 舞者王佳俊谈“与AI共舞”:像多了一个舞伴,要考虑它的“感受”