Spring Boot(2):SpringBootApplication注解

同步自个人我的博客墨语的后花园,请多多指教。java


这篇文章就来简单的介绍出初始化建立Spring Boot程序的时候提供的两个类级别的注解,一个是用于程序如口程序的@SpringBootAppliaction注解和用于测试使用的@SpringBootTest注解 ,还有就是关注一下SpringRunner类。app

@SpringBootAppliaction注解

首先咱们先来简单的看一下他的源码:测试

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class))
public @interface SpringBootApplication {
  
	Class<?>[] exclude() default {};

	String[] excludeName() default {};

	@AliasFor(annotation = ComponentScan.class, attribute = "basePackages")
	String[] scanBasePackages() default {};

	@AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")
	Class<?>[] scanBasePackageClasses() default {};

}

这份源代码中有三个比较重要的类级别的注解,一个是@SpringBootConfiguration,这个注解代表这个是一个Spring Boot程序。第二个是一个@EnableAutoConfiguration注解,表示这个Spring Boot的程序是使用自动配置的,若是须要配置一些其余的配置,则能够在application.properties或application.yml中进行配置,Spring Boot会自动加载这些配置文件;在类中的还能够引入其余配置文件的方式另说。第三个是@ComponentScan注解,代表在这个文件的同级别的包之下的全部文件的注解都是能够被发现的。code

接口中定义的方法中,有两个方法是用来加载配置类的,这些配置类就是在application.properties中的内容,喜欢直接使用配置类的应该会喜欢这个方法的。剩下的两个方法则是对于扫描类包的了,默认状况下,只会扫描的同级别下全部的类包,可是若是有些类包不想被扫描到的话也可使用这个方法制定扫描的类包。继承

@SpringBootTest注解

源代码为:教程

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@BootstrapWith(SpringBootTestContextBootstrapper.class)
public @interface SpringBootTest {
  // 详细内容请看源码
}

这里只有一个类级别的注解须要关注,这就是@BootstrapWith注解,这个注解是告诉测试程序测试的入口,通常状况下咱们使用Junit进行测试的时候,老是本身加载各类依赖,而使用这个注解则告诉了测试程序配置加载的位置,固然通常是加载默认的配置文件,也能够加载自定义的文件。接口

而其中默认提供的SpringBootTestContextBootstrapper则是一个实现测试文件配置的加载,启动入口以及基本的配置,这我么能够从其继承链上看出来这是对TestContextBootstrapper的实现:图片

SpringBootTestContextBootstrapper

SpringRunner

对于测试文件,若是常常看网上教程的人会发如今测试文件使用的时候使用@RunWith注解会发现使用的不是SpringRuuner.class,而是使用SpringJUnit4ClassRunner.class,这是是否是会认为SpringRunner更增强大的呢。其实不是,SpringRunner集成了SpringJUnit4ClassRunner,其中就多了一个方法,就是:get

public SpringRunner(Class<?> clazz) throws InitializationError {
		super(clazz);
}

这实际上是一个构造器,就是将标准的Junit测试文件加载到TestContextManager中,固然了,既然使用了@RunWith注解了,在这个时候其中的内容SpringRuuner和SpringJUnit4ClassRunner是没有多大区别的,可是在其余状况下仍是有区别的。同步

SpringApplication

这个类至关的有意思,在目前的状况下咱们使用到的实际上是他的一个静态类run,在源文件中,这个方法是一个重载方法,在之后咱们还可使用这个方法定义在系统加载的时候的参数,默认状况下,这些参数和application.propreties中的没有什么不一样,可是咱们能够更加本身的须要进行添加,让其加载个性化的参数。

相关文章
相关标签/搜索