SpringBoot自动装配原理
pom.xml
- Spring-boot-dependencies:核心依赖在父工程中
- 导入依赖时不用指定版本,因为有版本仓库
启动器:
- SpringBoot的启动场景
- 例:spring-boot-starter-web,会自动导入web环境所有的依赖
- SpringBoot会将所有的功能场景,都变成一个个的启动器
主程序:
package com.sw.helloworld;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication //标注这是一个SpringBoot应用
public class HelloworldApplication {
public static void main(String[] args) {
//启动SpringBoot
SpringApplication.run(HelloworldApplication.class, args);
}
}
1、SpringBoot在启动的时候从类路径下的META-INF/spring.factories中获取AutoConfiguration指定的值
2、将这些值作为自动配置类导入容器,自动配置类生效
3、J2EE的整体解决方案和自动配置都在SpringBoot-autoConfig的jar包中
4、它会将需要的组件以全类名的方式返回,这些组件就会被添加到容器中
5、他会给容器中导入非常多的配置类,也就是导入并配置这个场景所需要的组件
@SpringApplication(启动类注解) ---> @EnableAutoConfiguration(自动配置注解) ---> @Import(AutoConfigurationSelector.class)(自动导入配置文件的选择器) ---> getCandidateConfigurations()(获取所有候选配置) ---> 通过spring.factories获取配置类的位置 ---> @ConditionOnClass判断 ---> 条件成立(不加载该配置类) ---> 条件不成立(获取配置类,在上层方法中循环封装为properties来使用)
xxxAutoConfiguration:自动配置类(给容器中添加组件)
xxxProperties:封装配置文件中的相关属性(application.yaml)
SpringApplication:
1、推断应用的类型是普通项目还是web项目
2、查找并加载所有可用初始化器,设置到initializers属性中
3、找出所有的应用程序监听器,设置到listeners属性中
4、推断并设置main方法的定义类,找到运行的主类
评论 (0)