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;@RestControllerpublic 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@Configurationpublic @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:----------- NoneUnconditional classes:---------------------- org.springframework.boot.autoconfigure.context.ConfigurationPropertiesAutoConfiguration org.springframework.boot.autoconfigure.context.LifecycleAutoConfiguration .........