目录
1:创建SpringBoot项目
1.1:idea创建项目
对于SpringBoot概念和开发工具配置进行了准备,这一章开始搭建SpringBoot的项目入门,开发工具是idea.
然后创建项目名称为SpringBoot3,点击下一步
点击完成,之后再idea中就能看到新建的SpringBoot的项目了,稍等idea下载相关的jar,然后就能看到项目的完成目录结构,如果是第一次配置 Spring Boot 的话可能需要等待一会儿 IDE下载相应的 依赖包.
项目结构还是看上去挺清爽的,少了很多配置文件,我们来了解一下默认生成的有什么:
Springboot201Application: 一个带有 main() 方法的类,用于启动应用程序
Springboot201ApplicationTests:一个空的 Junit 测试了,它加载了一个使用 Spring Boot 字典配置功能的 Spring 应用程序上下文
application.properties:一个空的 properties 文件,可以根据需要添加配置属性
pom.xml: Maven 构建说明文件
1.2:写一个简单的HelloController
//@RestController注解
//该注解是 @Controller 和 @ResponseBody 注解的合体版
//(如果只单用@Controller,页面无返回值)
@RestController
public class HelloController {
@GetMapping(value = "hello")
public String hello(){
return "hello springBoot 版本:2.7.14";
}
}
1.3:启动SringBoot
//Component扫描 跟SpringBootApplication冲突
//@ComponentScan(value = "com.example.springboot2_01")
//包扫描 外部的包也能被扫描到
@SpringBootApplication(scanBasePackages = "com.example")
public class SpringBoot201Application {
/**
*
* springBoot版本 v2.7.14
* 需要jdk1.8以上
* maven 3.5+
* @param args
*/
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(SpringBoot201Application.class, args);
String[] beanDefinitionNames = run.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
System.out.println("bean名字:"+beanDefinitionName);
}
}
}
在这个类中SpringBoot201Application,右键 run java application 然后就能看到控制台输出(
然后在浏览器访问地址如下,这就是一个最简单的SpringBoot入门案例。启动类启动
2:项目文件解析
2.1:解析pom.xml来创建依赖管理
<?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>
<!--springBoot父类启动器-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.14</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--本项目信息-->
<groupId>com.example</groupId>
<artifactId>SpringBoot2_01</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>SpringBoot2_01</name>
<description>SpringBoot2_01</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<!--springWeb依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 引入其他的springboot官网starter 自动导入相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!--热部署,改代码不需要重启-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<!-- lomBok注解依赖包-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- 测试类依赖包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- mysql依赖jar-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<!-- springboot打包插件 打成一个胖包 包含所有的东西 直接运行-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.project-lombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
我们可以看到一个比较陌生一些的标签 <parent>
,这个标签是在配置 Spring Boot 的父级依赖:
<!--springBoot父类启动器-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.14</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
重点:有了这个,当前的项目才是 Spring Boot 项目,spring-boot-starter-parent 是一个特殊的 starter。这里就体现了SpringBoot的依赖管理,这个父启动器依赖中规定了各种启动器依赖jar包的版本,使用它之后,常用的包依赖就可以省去 version 标签。
2.2:应用入口类解析
Spring Boot 项目通常有一个名为 *Application 的入口类,入口类里有一个 main 方法, 这个 main 方法其实就是一个标准的 Java 应用的入口方法。
//Component扫描 跟SpringBootApplication冲突
//@ComponentScan(value = "com.example.springboot2_01")
//包扫描 外部的包也能被扫描到
@SpringBootApplication(scanBasePackages = "com.example")
public class SpringBoot201Application {
/**
*
* springBoot版本 v2.7.14
* 需要jdk1.8以上
* maven 3.5+
* @param args
*/
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(SpringBoot201Application.class, args);
String[] beanDefinitionNames = run.getBeanDefinitionNames();
for (String beanDefinitionName : beanDefinitionNames) {
System.out.println("bean名字:"+beanDefinitionName);
}
}
}
@ComponentScan(basePackages= {"com.example.*"})
ComponentScan用于加载指定的自定义包,默认加载当前包的子包
@SpringBootApplication 是 Spring Boot 的核心注解,它是一个组合注解,该注解组合了:@Configuration、@EnableAutoConfiguration、@ComponentScan; 若不是用 @SpringBootApplication 注解也可以使用这三个注解代替。
其中,@EnableAutoConfiguration 让 Spring Boot 根据类路径中的 jar 包依赖为当前项目进行自动配置,例如,添加了 spring-boot-starter-web 依赖,会自动添加 Tomcat 和 Spring MVC 的依赖,那么 Spring Boot 会对 Tomcat 和 Spring MVC 进行自动配置。
Spring Boot 还会自动扫描 @SpringBootApplication 所在类的同级包以及下级包里的 Bean ,所以入口类建议就配置在 grounpID + arctifactID 组合的包名下(这里为 com.thit.springboot 包)
2.3:Spring Boot 的配置文件解析
Spring Boot 使用一个全局的配置文件 application.properties 或 application.yml,放置在【src/main/resources】目录或者类路径的 /config 下。这两种配置文件实际上没什么大的区别,这是格式不一样,yml便于根据不同的开发测试生产环境,引入其对应环境的yml文件
Spring Boot 不仅支持常规的 properties 配置文件,还支持 yml 语言的配置文件。yml 是以数据为中心的语言,在配置数据的时候具有面向对象的特征。
Spring Boot 的全局配置文件的作用是对一些默认配置的配置值进行修改。
3:SpringBoot热部署
在目前的 Spring Boot 项目中,当发生了任何修改之后我们都需要重新启动才能够正确的得到效果,这样会略显麻烦,Spring Boot 提供了热部署的方式,当发现任何类发生了改变,就会通过 JVM 类加载的方式,加载最新的类到虚拟机中,这样就不需要重新启动也能看到修改后的效果了。我们往 pom.xml 中添加一个依赖就可以了:
<!--热部署,改代码不需要重启-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
随意更改项目,不要重启,即可查看最新的效果