SpringBoot 学习(一)自动装配

本系列文章为【狂神说 Java 】视频的课堂笔记,若有需要可配套视频学习。

1.1 pom.xml

(1) 父工程( spring-boot-starter-parent

  • 核心依赖,静态资源过滤等配置。
  • 编写或导入 springboot 依赖时不需要指定版本号,继承父工程版本。

(2) 启动器( spring-boot-starter

  • springboot 的启动场景,功能场景。

  • 添加某功能对应的启动器依赖即可使用此功能。

  • springboot 的依赖前缀

    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-webartifactId>
    dependency>
    

1.2 主程序

@SpringBootApplication
public class HelloApplication {
    public static void main(String[] args) {
        SpringApplication.run(HelloApplication.class, args);
    }
}

1.2.1 注解( @SpringBootApplication

  • @SpringBootConfiguration :SpringBoot 配置类

  • @EnableAutoConfiguration :自动装配

    • 自动装配流程

      • springboot 启动时从 spring.factories 获取目标类(组件)的全限定名,将其添加到容器。

        SpringBoot 学习(一)自动装配_第1张图片

    • 配置仓库

      • spring.factories 中的所有配置类含 @ConditionalOnxxx 注解,只有满足此注解的所有条件,此配置才会生效。

      SpringBoot 学习(一)自动装配_第2张图片

  • 结论

    • springboot 的自动配置是在启动时扫描并加载的。
    • 导入对应的启动器( starter ),自动装配就会生效。

1.2.2 main 方法

(1) SpringApplication
  • 判断此应用是普通 Java 项目还是 Web 项目。

  • 查找并加载所有可用的初始化器,设置到 initializers 中。

  • 查找所有应用程序监听器,设置到 listeners 中。

  • 推断并设置 main 方法的定义类,找到主类。

  • 查看类构造器。

    /**
     * 创建一个新的 SpringApplication 实例,用于加载应用程序上下文,该实例可以在调用 run 方法
     * 前自定义。
     * @param resourceLoader 资源加载器
     * @param primarySources bean 源
     * @see #run(Class, String[])
     * @see #setSources(Set)
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) {
       this.resourceLoader = resourceLoader;
       Assert.notNull(primarySources, "PrimarySources must not be null");
       this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources));
       this.webApplicationType = WebApplicationType.deduceFromClasspath();
       this.bootstrapRegistryInitializers = getBootstrapRegistryInitializersFromSpringFactories();
       setInitializers((Collection) getSpringFactoriesInstances(ApplicationContextInitializer.class));
       setListeners((Collection) getSpringFactoriesInstances(ApplicationListener.class));
       this.mainApplicationClass = deduceMainApplicationClass();
    }
    
(2) run() 方法
  • 启动应用监听器、获取装配环境参数等。

  • 执行流程

    SpringBoot 学习(一)自动装配_第3张图片

你可能感兴趣的:(SpringBoot,spring,boot,java,后端)