在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); }