springBoot啓動一覽

  1. pom的配置

在parent節點指定了要依賴的springboot的版本信息。它本身又在 java

<relativePath>../../spring-boot-dependencies</relativePath> 中設置了所須要的各個jar包的依賴spring

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>    
        <!--加上這個依賴,ConfigurationProperties 能夠使用這個註解,將java類與配置文件作個綁定-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <!-- 這個插件,能夠將應用打包成一個可執行的jar包;-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

2.啓動類的設置。這裏要注意獲得是junit的test類要和啓動類的報位置一致,否則在運行junit測試的時候會拋出找不到main方法。啓動類的設置以下:springboot

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

在沒有任何配置的狀況下,他會自動將系統所須要的組件掃描到spring容器中主要是 @SpringBootApplication的功能。@SpringBootApplication是一個組合註解,由以下註解組合而成,其中最主要的是 SpringBootConfiguration和EnableAutoConfigurationmaven

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

2.1:SpringBootConfiguration做用是起到 @Configuration的做用將該類註冊到spring的容器中ide

2.2:EnableAutoConfiguration也是組合註解spring-boot

@AutoConfigurationPackage
@Import(EnableAutoConfigurationImportSelector.class)

AutoConfigurationPackage註解測試

@Import(AutoConfigurationPackages.Registrar.class)public @interface AutoConfigurationPackage {}
----

AutoConfigurationPackages


@Order(Ordered.HIGHEST_PRECEDENCE)
static class Registrar implements ImportBeanDefinitionRegistrar, DeterminableImports {


    @Override
    public void registerBeanDefinitions(AnnotationMetadata metadata,
        BeanDefinitionRegistry registry) {
        //將元數據的包下面的全部類+子包下面的類所有加載到spring容器中
        register(registry, new PackageImport(metadata).getPackageName());
    }

}

register方法是讀取使用了該註解的類的包路徑,並把該路徑下面全部的類都註冊到spring容器中。ui

2.2.1: import註解應用的  EnableAutoConfigurationImportSelector this

該類的父類:AutoConfigurationImportSelector的 selectImports().插件

@Override
public String[] selectImports(AnnotationMetadata annotationMetadata) {
    if (!isEnabled(annotationMetadata)) {
        return NO_IMPORTS;
    }
    try {
        AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader
        .loadMetadata(this.beanClassLoader);

看他loadMetaData方法:是將springboot中一個配置文件配置全部的spring運行所須要的類加載到容器裏面。配置類看附件

protected static final String PATH = "META-INF/spring-autoconfigure-metadata.properties";

public static AutoConfigurationMetadata loadMetadata(ClassLoader classLoader) {
    return loadMetadata(classLoader, PATH);
}
相關文章
相關標籤/搜索