一、创建
官网创建方式
1、进入网页https://spring.io/projects 选择springboot并点击
2、在新页面拉到底,点击Spring Initializr后,进入创建页面
3、填写个人配置,Dependencies添加一个Spring Web(看项目需要)
4、点击generate,将下载的文件解压,导入到idea即可
问题1:open的项目右侧没有maven
解决办法:help——find action——查找 Add Maven Projects 并点击——选择pom.xml——ok
问题2:pom.xml中依赖 spring-boot-maven-plugin报红
解决办法:复制 spring-boot-starter-parent 的版本号到spring-boot-maven-plugin下面
idea创建方式
正常创建时情况如下截图,点击下一步级跟官网创建方式一样了。社区版没有Spring Initializr,后面百度说安装插件Spring Assistant可以代替;
结果我只找到了插件spring-assistant-@valueToYml,遂放弃,不想浪费时间。官网创建也没差多少
二、主程序的注解@SpringBootApplication的注解
1、@ComponentScan
这个注解在Spring中很重要 ,它对应XML配置中的元素。
作用:自动扫描并加载符合条件的组件或者bean , 将这个bean定义加载到IOC容器中
2、@SpringBootConfiguration
SpringBoot的配置类 ,标注在某个类上 , 表示是SpringBoot的配置类
(1)@Configuration 说明这是一个配置类 ,配置类就是对应Spring的xml 配置文件, 点开这个注解会有如下1个注解
@Component 说明启动类本身也是Spring中的一个组件而已,负责启动应用!
3、@EnableAutoConfiguration
告诉SpringBoot开启自动配置功能,这样自动配置才能生效, 点开这个注解会有如下2个注解
(1)@AutoConfigurationPackage 自动配置包 点开这个注解会有如下1个注解
@Import(AutoConfigurationPackages.Registrar.class) 将主启动类的所在包及包下面所有子包里面的所有组件扫描到Spring容器
(2)@Import(AutoConfigurationImportSelector.class) 给容器导入组件
点击AutoConfigurationImportSelector 源码,找到getCandidateConfigurations方法;
这个方法调用了SpringFactoriesLoader 类loadFactoryNames() 方法;
loadFactoryNames() 方法又调用了loadSpringFactories 方法,在该方法中,自动配置的文件是从META-INF/spring.factories目录拿到的
spring.factories是spring-boot-autoconfigure-2.5.4.jar包META-INF目录下,保存了很多用于自动配置的JavaConfig类
org.springframework.boot.autoconfigure.xxx 的配置项,
通过反射实例化为对应标注了 @Configuration的JavaConfig形式的IOC容器配置类 ,
然后将这些都汇总成为一个实例并加载到IOC容器中。
结论:
1、SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值
2、将这些值作为自动配置类导入容器 , 自动配置类就生效 , 帮我们进行自动配置工作;
3、整个J2EE的整体解决方案和自动配置都在springboot-autoconfigure的jar包中;
4、它会给容器中导入非常多的自动配置类 (xxxAutoConfiguration), 就是给容器中导入这个场景需要的所有组件 , 并配置好这些组件 ;
有了自动配置类 , 免去了我们手动编写配置注入功能组件等的工作;
参考来源:https://www.cnblogs.com/hellokuangshen/p/12450327.html
三、主程序
这个类主要做了以下四件事情,具体见上一个连接
1、推断应用的类型是普通的项目还是Web项目
2、查找并加载所有可用初始化器 , 设置到initializers属性中
3、找出所有的 应用程序监听器, 设置到listeners属性中
4、推断并设置main方法的定义类,找到运行的主类