1.项目环境搭建
1.1 JDK配置
1.1.1 JDK环境说明
1.1.2 JDK环境变量配置
1.2 Maven配置
1.2.1 私服镜像配置
<mirror>
<id>aliyun</id>
<name>aliyun for maven</name>
<mirrorOf>*</mirrorOf>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
1.2.2 本地仓库位置
1.3 STS配置
1.3.1 配置字符集编码格式
1.3.2 检查JDK配置
1.3.3 引入maven
1).配置maven环境
2).编辑maven配置文件
1.4 构建SpringBoot入门项目
1.4.1 创建项目
2 项目概述
3.SpringBoot框架高级说明
3.1 parent标签的作用
<!--1.jar包种类繁多 A.jar 1.0版本 B.jar 2.0版本C.jar 3.0版本 A.jar 2.0版本 B.jar 2.0版本 C.jar 3.0版本
早期的jar包版本 可能出现jar包冲突的问题. 所有采用parent标签的方式 统一定义了版本号
由官方自己进行测试, 将允许稳定的版本统一的管理. -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version> <relativePath />
</parent>
3.2 关于maven 插件的说明
<!-- maven项目指定的插件配置 该插件主要负责 maven项目相关操作 打包/test/clean/update
等相关maven操作 注意事项:但凡是maven项目则必须添加
插件.否则将来项目部署必然出错 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
3.3 关于Maven 属性的配置
<!--当前maven配置信息 -->
<properties>
<java.version>1.8</java.version>
<!--定义maven插件版本 -->
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
<!--项目打包时,跳过测试类打包-->
<skipTests>true</skipTests>
</properties>
3.4 关于Maven依赖说明
3.4.1 依赖与本地仓库的关系
<!--maven的依赖 利用坐标的形式管理jar包 本地仓库之间有什么关系呀? -->
<dependency>
<!--组ID, 公司域名倒写. -->
<groupId>org.springframework.boot</groupId>
<!--具体项目名称 -->
<artifactId>spring-boot-starter-web</artifactId>
<!--版本号 被parent标签提前定义 -->
<!-- <version>2</version> -->
</dependency>
本地仓库内容
规则说明
如果以后下载jar包时,遇到maven依赖异常.则首先查询本地仓库中是否有该jar包的完整版本.
如果发现jar包文件下载不完全,则需要删除之后重新下载.
3.4.2 jar包与jar包之间的依赖传递性说明
1.说明: maven具有jar包的依赖性
例如: A.jar---->B.jar ------> C.jar
只要导入A.jar 那么b/c都会自动的完成依赖
2).检查POM.xml文件
说明:由于maven加载jar包之后还会去加载该jar包文件的POM文件,如果该POM文件中依赖了其他的jar包,那么maven也会自动的进行加载.
4. IDEA创建SpringBoot项目
3.1 创建maven项目
3.1.1添加插件之后,重启IDEA即可
3.1.2IDEA创建SpringBoot
1).挑选SpringBoot
2).编辑模块内容
3).选择jar包依赖
3.2 手动创建SpringBoot项目
3.2.1创建maven项目
3.2.2指定项目名称
3.2.3编辑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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jt</groupId>
<artifactId>sprongboot_demo2</artifactId>
<version>1.0-SNAPSHOT</version>
<!--1.jar包种类繁多
A.jar 1.0版本 B.jar 2.0版本 C.jar 3.0版本
A.jar 2.0版本 B.jar 2.0版本 C.jar 3.0版本
早期的jar包版本 可能出现jar包冲突的问题.
所有采用parent标签的方式 统一定义了版本号 由官方自己进行测试,
将允许稳定的版本统一的管理.
--> <parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.4.RELEASE</version>
<relativePath/> </parent>
<!--开箱即用:SpringBoot项目只需要引入少量的jar包及配置,即可拥有其功能.
spring-boot-starter 拥有开箱即用的能力.
maven项目中依赖具有传递性.
A 依赖 B 依赖 C项目 导入A bc会自动依赖
-->
<properties>
<java.version>1.8</java.version>
<!--定义maven插件版本 -->
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
<!--项目打包时,跳过测试类打包-->
<skipTests>true</skipTests>
</properties>
<dependencies> <!--2maven的依赖 利用坐标的形式管理jar包 本地仓库之间有什么关系呀? -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency> <!--组ID, 公司域名倒写. -->
<groupId>org.springframework.boot</groupId>
<!--具体项目名称 -->
<artifactId>spring-boot-starter-test</artifactId>
<!--版本号 被parent标签提前定义 -->
<!-- <version>2</version> --> <scope>test</scope>
<exclusions> <exclusion> <groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion> </exclusions> </dependency> <dependency> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency> </dependencies> <!--3 maven项目指定的插件配置 该插件主要负责 maven项目相关操作 打包/test/clean/update
等相关maven操作 注意事项:但凡是maven项目则必须添加
插件.否则将来项目部署必然出错 -->
<build>
<plugins> <plugin> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin> </plugins> </build></project>
3.2.4编辑POM.xml配置文件
package com.jt;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication//标识我是一个springboot项目
public class SpringBootRun {
/**
* main方法是java程序的唯一入口
* @param args
*/
public static void main(String[] args) {
//加载@SpringBootApplication//标识我是一个springboot项目
SpringApplication.run(SpringBootRun.class,args);
}
}
3.2.5编辑测试Controller
package com.jt.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloComtroller {
@RequestMapping("/hello")
public String hello(){
return "hello";
}
}
4.SpringBoot启动原理说明
4.1 需求说明
1.SpringBoot启动是如何流转的.
2.什么叫做开箱即用,springBoot中如何实现开箱即用的.
4.2 "开箱即用"说明
如果需要引入第三方的"工具/功能",只需要经过少量的配置/或者不做任何配置.则就可以使用该功能.
4.2.1 关于启动项的说明
<!--直接的依赖项-->
<dependency>
<groupId>org.springframework.boot</groupId>
<!--springBoot启动项 内部的jar包文件已经将配置准备完成,用户
只需要导入jar包就可以获取其功能.
starter-web 直接引入了SpringMVC框架
传统mvc框架配置:
1.导入特定的jar包及版本.
2.编辑web.xml配置 dispatcherServler 拦截路径
3.配置mvc的配置文件 包扫描 视图解析器....
-->
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
4.3 SpringBoot程序启动加载过程
4.3.1元注解说明:
@Target(ElementType.TYPE) 对哪个元素有效 对类有效
@Retention(RetentionPolicy.RUNTIME) 什么时候起作用 运行期有效
@Documented 是否支持生成文档
@Inherited 该注解是否可以被继承.
4.3.2 SpringBootConfiguration说明
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {......}
4.3.3 excludeFilters 说明
说明: 在springboot容器启动时,不需要加载某些过滤器.由于parent标签中定义了所有的关联的jar包文件信息.则启动时有可能导致意外的发生,所有需要提前剔除.
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
4.3.4 @AutoConfigurationPackage
说明: 当程序启动时,会根据主启动类的包路径,扫描其子孙包,所以springboot以后写代码时应该在其子孙包下编辑.
4.3.5 AutoConfigurationImportSelector
说明:该配置中内部集成了所有的SpringBoot中的选择器.这些选择器的主要的任务就是查看是否有自己选择器所管理的启动项的配置. 如果发现该启动项,那么选择器就会执行该启动项,从而实现了开箱即用的操作.
============================
CONDITIONS EVALUATION REPORT
============================
Positive matches:
-----------------
AopAutoConfiguration matched:
- @ConditionalOnProperty (spring.aop.auto=true) matched (OnPropertyCondition)
DispatcherServletAutoConfiguration.DispatcherServletRegistrationConfiguration matched:
- @ConditionalOnClass found required class 'javax.servlet.ServletRegistration' (OnClassCondition)
- DispatcherServlet Registration did not find servlet registration bean (DispatcherServletAutoConfiguration.DispatcherS
ServletWebServerFactoryAutoConfiguration#tomcatServletWebServerFactoryCustomizer matched:
- @ConditionalOnClass found required class 'org.apache.catalina.startup.Tomcat' (OnClassCondition)
.......
Negative matches:
-----------------
R2dbcTransactionManagerAutoConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'org.springframework.data.r2dbc.connectionfactory.R2dbcTransactionManager' (OnClassCondition)
RSocketMessagingAutoConfiguration:
Did not match:
- @ConditionalOnClass did not find required class 'io.rsocket.RSocketFactory' (OnClassCondition)
Did not match:
.........
Exclusions:
-----------
None
Unconditional classes:
----------------------
org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration
org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration
.........
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。