- pom的配置
在parent节点指定了要依赖的springboot的版本信息。它自己又在
<relativePath>../../spring-boot-dependencies</relativePath> 中设置了所需要的各个jar包的依赖
<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方法。启动类的设置如下:
@SpringBootApplication
public class AppBoots {
public static void main(String[] args) {
SpringApplication.run(AppBoots.class, args);
}
}
在没有任何配置的情况下,他会自动将系统所需要的组件扫描到spring容器中主要是 @SpringBootApplication的功能。@SpringBootApplication是一个组合注解,由如下注解组合而成,其中最主要的是 SpringBootConfiguration和EnableAutoConfiguration
@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的容器中
2.2:EnableAutoConfiguration也是组合注解
@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容器中。
2.2.1: import注解应用的 EnableAutoConfigurationImportSelector
该类的父类: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);
}