SpringBoot自动装配原理

suaxi
2020-12-22 / 0 评论 / 701 阅读 / 正在检测是否收录...

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

评论 (0)

取消