1.父工程的父工程
在父工程的父工程中的核心依赖,专门用来版本管理的
版本管理。
2.父工程
资源过滤问题,都帮解决了,什么配置文件,都已经配置好了,资源过滤问题是帮助,过滤解决让静态资源文件能够过滤到,类加载器的目录下,也就是编译后的目录,target
3.子工程
我们再写或者引入一些springboot依赖的时候,不需要指定版本,是因为有版本仓库帮我们选择相应的版本
3.1启动器
这就是一个启动器的依赖,说白了就是springboot的启动场景
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
- 启动器:说白了就是Springboot的启动场景;
- 比如spring-boot-starter-web,他就会帮我们自动导入web环境所有的依赖!
- springboot会将所有的功能场景,都变成一个个的启动器;
- 我们要使用什么功能,就只需要找到对应的启动器就可以了 `starter` !
-
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>//这是打包插件
3.2 主程序
@SpringBootApplication 标注这个类是一个springboot的应用
SpringApplication.run(Springboot02ConfigApplication.class, args);是一个静态方法,通过它让springboot启动,通过反射,加载Springboot02ConfigApplication这个类的对象,传入主方法参数,让springboot启动
3.2.1 注解
核心就是两个注解:
1.@SpringBootConfiguration 是 springboot的配置
@Configuration这个代表它是spring的一个配置类
@Component 这个注解代表它是一个spring组件,也就是bean对象
2.@EnableAutoConfiguration 自动配置
@AutoConfigurationPackage自动配置包
@Import({Registrar.class}) 导入了注册器
AnnotationMetadata metadata 元数据
@Import({AutoConfigurationImportSelector.class}) 导入了选择器
@import注解里面的类如果实现了ImportSelector接口,那么就会自动调用selectImports方法
选择组件,选择在pom.xml下配置了哪些东西
在选择器那个类下
获取候选的所有配置
protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
List<String> configurations = new ArrayList(SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader()));
ImportCandidates.load(AutoConfiguration.class, this.getBeanClassLoader()).forEach(configurations::add);
Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories nor in META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports. If you are using a custom packaging, make sure that file is correct.");
return configurations;
}
这个注解被
@SpringBootApplication所继承
就是做一件事情:启动类 下 的所有资源 被导入
3.2.2 META-INF/spring.factories 自动配置的核心文件
所有的资源加载到配置类中
根据条件判断要不要把这个类加载到配置中
结论:springboot所有自动配置都是在启动的时候扫描并加载:META-INF/spring.factories所有的自动配置都在这里面,但是不一定生效,要判断条件是否成立,只要导入了对应的start,,产生了对应的jar包,就有对应的启动器了,有了对应的jar包,我们自动装配就会生效,然后就配置成功!
-
springboot在启动的时候,从类路径下META-INF/spring.factories获取指定的值;
-
将这些自动配置的类导入容器,自动配置就会生效,帮我进行自动配置!
-
以前我们需要自动配置的东西,现在springboot帮我们做了!
-
整合javaEE,解决方案和自动配置的东西都在spring-boot-autoconfigure-2.7.14.jar这个包下
-
它会把所有 生效的 需要导入的配置类组件,以类名的方式返回,这些组件就会被添加到容器
-
容器中也会存在许多的 XXXAutoConfiguration 的文件(@Bean),就是这些类给容器中导入了这个配置类下需要的所有组件也就是@Bean( 一个个的对象,将这些对象加载到本配置类,也就是IOC容器,相当于Spring里的一个xml文件)并自动配置,@Configuration ,javaConfig!
-
有了自动配置类,免去了我们手动编写配置文件的工作!!!