文档章节

Spring Boot(2):SpringBootApplication注解

wjpworking
 wjpworking
发布于 2016/09/23 11:10
字数 923
阅读 181
收藏 3

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


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

@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注解,表明在这个文件的同级别的包之下的所有文件的注解都是可以被发现的。

接口中定义的方法中,有两个方法是用来加载配置类的,这些配置类就是在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,其中就多了一个方法,就是:

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

这其实是一个构造器,就是将标准的Junit测试文件加载到TestContextManager中,当然了,既然使用了@RunWith注解了,在这个时候其中的内容SpringRuuner和SpringJUnit4ClassRunner是没有多大区别的,但是在其他情况下还是有区别的。

SpringApplication

这个类相当的有意思,在目前的情况下我们使用到的其实是他的一个静态类run,在源文件中,这个方法是一个重载方法,在以后我们还可以使用这个方法定义在系统加载的时候的参数,默认情况下,这些参数和application.propreties中的没有什么不同,但是我们可以更加自己的需要进行添加,让其加载个性化的参数。

© 著作权归作者所有

wjpworking
粉丝 6
博文 12
码字总数 19808
作品 0
朝阳
程序员
私信 提问
spring boot框架学习2-spring boot核心(1)

本节主要: 1:解析spring boot入口和@SpringBootApplication源码详解 SpringBootApplication包含: @SpringBootConfiguration @ComponentScan @EnableAutoConfiguration 本文是《凯哥陪你学......

凯哥java
2017/10/27
0
0
spring boot框架学习3-spring boot核心(2)

本节主要: 1:解析spring boot入口和@SpringBootApplication源码详解 SpringBootApplication包含: @SpringBootConfiguration @ComponentScan @EnableAutoConfiguration 本文是《凯哥陪你学......

凯哥java
2017/10/26
0
0
Spring Boot 最核心的 3 个注解详解

最近面试一些 Java 开发者,他们其中有些在公司实际用过 Spring Boot, 有些是自己兴趣爱好在业余自己学习过。然而,当我问他们 Spring Boot 最核心的 3 个注解是什么,令我失望的是鲜有人能答...

Java技术栈
2018/10/16
0
0
SpringBoot(二)之核心

Spring Boot的核心 在上篇中我们成功运行了一个简单的web应用,其中有一个注解被轻易的带过了,但它在Spring Boot中是最重要的注解,没有之一,它就是@SpringBootApplication,本篇将对它与S...

郑加威
2018/12/23
0
0
spring boot 1.5.4 入门和原理(二)

1 spring boot入门 1.1 环境准备 JDK 7及以上 eclipse开发工具 项目管理工具Maven 本文采用、RELEASE(或1.5.2.RELEASE)调试通过。 spring-boot相关项目源码, 码云地址:https://git.oschi...

wyait
2017/09/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JWT学习总结

官方 https://jwt.io 英文原版 https://www.ietf.org/rfc/rfc7519.txt 或 https://tools.ietf.org/html/rfc7519 中文翻译 https://www.jianshu.com/p/10f5161dd9df 1. 概述 JSON Web Token(......

冷基
今天
4
0
AOP的学习(1)

AOP 理解AOP编程思想(面向方法、面向切面) spring AOP的概念 方面 -- 功能 目标 -- 原有方法 通知 -- 对原有方法增强的方法 连接点 -- 可以用来连接通知的地方(方法) 切入点 -- 将用来插入...

太猪-YJ
今天
4
0
一张图看懂亮度、明度、光度、光亮度、明亮度

亮度、明度、光亮度,Luminance和Brightness、lightness其实都是一个意思,只是起名字太难了。 提出一个颜色模型后,由于明度的取值与别人的不同,为了表示区别所以就另想一个词而已。 因此在...

linsk1998
昨天
11
0
Python应用:python链表示例

前言 python链表应用源码示例,需要用到python os模块方法、函数和类的应用。 首先,先简单的来了解下什么是链表?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是...

python小白1
昨天
5
0
Source Insight加载源码

Source Insight是一个图形化的源代码查看工具(当然也可以作为编译工具)。如果一个项目的源代码较多,此工具可以很方便地查找到源代码自建的依赖关系。 1.创建工程 下图为Snort源代码的文件...

天王盖地虎626
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部