springboot入门-helloworld示例及自动配置原理

1、简单示例

1.1、新建一个普通maven项目

1.2、配置pom.xml


<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>com.vivigroupId>
    <artifactId>springboot-helloartifactId>
    <version>1.0-SNAPSHOTversion>
    <parent>
        <groupId>org.springframework.boot groupId>
        <artifactId>spring-boot-starter-parent artifactId>
        <version>2.0.5.RELEASEversion>
    parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-web artifactId>
            
        dependency>
    dependencies>

project>

1.3、HelloController

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    @RequestMapping("hello")
    public String hello() {
        return "hello springboot";
    }
}

1.4、ApplicationConfig

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/*@Configuration
@EnableAutoConfiguration//开启自动配置
@ComponentScan*/
@SpringBootApplication//相当于上面三个
public class ApplicationConfig {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationConfig.class,args);
    }
}

1.5、启动

springboot入门-helloworld示例及自动配置原理_第1张图片
springboot入门-helloworld示例及自动配置原理_第2张图片

2、自动配置原理简单分析

​ 谈到SpringBoot的自动配置原理,我们就要@SpringBootApplication这个注解说起,这个复合注解中有一个@EnableAutoConfiguration注解,简单来说,意思就是开启自动配置。

springboot入门-helloworld示例及自动配置原理_第3张图片
​ 从他的源码中,我们可以看到有一个关键的注解@Import(AutoConfigurationImportSelector.class),
springboot入门-helloworld示例及自动配置原理_第4张图片

而在AutoConfigurationImportSelector中有一个方法selectImports(),
springboot入门-helloworld示例及自动配置原理_第5张图片

这个方法中有一个getCandidateConfigurations,
springboot入门-helloworld示例及自动配置原理_第6张图片

通过这个可以看到SpringFactoriesLoader.loadFactoryNames()这个方法,这个方法扫描所有具有META-INF/spring.factories的jar包。
springboot入门-helloworld示例及自动配置原理_第7张图片
spring-boot-autoconfigure-xxxx.jar里就有一个这样的spring.factories文件。

springboot入门-helloworld示例及自动配置原理_第8张图片

这个spring.factories文件是一组一组的key=value的形式,其中一个key是EnableAutoConfiguration类的全类名,而它的value是一个xxxxAutoConfiguration的类名的列表,这些类名以逗号分隔。
springboot入门-helloworld示例及自动配置原理_第9张图片
综上:
这个@EnableAutoConfiguration注解通过@SpringBootApplication被间接的标记在了Spring Boot的启动类上。在SpringApplication.run(…)的内部就会执行selectImports()方法,找到所有JavaConfig自动配置类的全限定名对应的class,然后将所有自动配置类加载到Spring容器中。

你可能感兴趣的:(Java)