1. 环境搭建
1.1 Spring.io 建立项目
通过Spring.io 网站,自动建立一个springboot项目,失败的常见问题列表:
- Spring Initailizer 在创建的过程中,如果出现“java: 警告: 源发行版 17 需要目标发行版 17” 的错误,是JDK配置不对导致,解决方法参见:IDEA运行Spring工程报错:java: 警告: 源发行版 17 需要目标发行版 17
- Spring Boot 2.7.x 支持JDK8, Spring Boot 3.x.x 需要JDK17, 详细对应关系见: SpringBoot版本与JDK版本的对应关系_springboot和jdk版本对应
- Intellij Idea中出现 错误 “spring boot Cannot resolve method 'run(Class, String[])'”,请用该方法解决:解决idea中springboot出现Cannot resolve method 'run(java.lang.Class, String[])
- Intellij Idea中的 Run的绿色按钮是灰色的,那么则需要等待上述问题解决之后,再等待一下,Idea自动变绿。
1.2 Spring Initializer建立项目
通过IntelliJ Idea 当中的Spring initializer,自动建立一个springboot项目,失败的常见原因列表:
- 在POM文件当中加入 "spring-boot-stareter-web" 的artifactId,仍然无法启动tomcat,原因是包没有被导入,刷新 Intellij Idea中Maven的Dependencies即可。
Note备注:
- Spring Boot banner在线生成网站为: https://www.bootschool.net/ascii
- @Controller, @RestController 以及 @ResponseBody的区别为 @ResponseBody三种的对比
2. SpringBoot 自动装配
2.1 pom.xml
- spring-boot-dependencies: 核心依赖在父工程中
- 我们在写或者引入一些springboot依赖的时候,不需要指定版本,就因为有这些版本仓库
2.2 启动器Starter
- 说明了就是Springboot的启动场景,比如说: spring-boot-starter-web,就是帮我们自动导入web环境所有的依赖
- springboot会将所有的功能场景,都变成一个个的启动器
- 我们要使用什么功能,只需要找到对应的启动器就可以了,启动器列表为: Spring Boot Reference Documentation
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
2.3 主程序
- @SpringBootApplication: 标注这个类是一个springboot的应用,包括
- @SpringBootConfiguration
- @Configuration: Spring配置类
- @Component: 说明这也是一个spring的组件
- @EnableAutoConfiguration:自动配置
- @AutoConfigurationPackage: 自动配置包
- @Import(AutoConfigurationPackages.Registrar.class): 自动配置,包注册
- @Import(AutoConfigurationImportSelector.class): 自动配置导入选择
- @AutoConfigurationPackage: 自动配置包
- @SpringBootConfiguration
- SpringApplication.run(): 将springboot应用启动
2.3.1 @SpringBootApplication分析
结论:springboot所有自动配置都是在启动的时候扫描并加载,org.springframework.boot:spring-bot-autoconfigure/META-INF/spring.factories所有的自动配置类都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的starter,就有对应的启动了,有了启动器,我们自动装配就会身高,然后就配置成功。
- springboot在启动的时候,从类路劲下 /META-INF/spring.factories获取指定的值;
- 将这些自动配置的类导入容器,自动配置就会生效,帮我们进行自动配置;
- 以前我们需要自动配置的东西,现在springboot帮我们做了;
- 整个JavaEE,解决方案和自动配置的东西都在spring-boot-autoconfig....jar 这个包下;
- 它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器;
- 容器中也会存在非常多的xxxAutoConfiguration的文件,就是这些类给容器中导入了这个场景所需要的所有组件,并自动配置 @Configuration
- 有了自动配置类,免去了我们手动编写配置文件的工作。
2.3.2 SpringApplication.run() 分析
这个类主要做了一下四件事情:
- 推断应用的类型是普通的项目还是Web项目
- 查找并加载所有可用初始化器,设置到initializers属性中
- 找出所有的应用程序监听器,设置到listenners属性中
- 推断并设置main方法的定义类,找到运行的主类
标签:SpringBoot,spring,配置,boot,自动,Spring,springboot From: https://www.cnblogs.com/zjfun/p/17585514.html