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