说说 Spring Boot 项目引导与测试原理
发布日期:2021-06-29 21:04:14 浏览次数:2 分类:技术文章

本文共 1947 字,大约阅读时间需要 6 分钟。

1 引导项目

因为 Spring Boot 项目会以可执行 JAR 文件的形式来运行,所以 Spring Boot 项目会定义一个主类,主类中提供 main 方法,它会在 JAR 运行时被执行。这个主类以注解的形式绑定 Spring 框架,完成 Spring 基础配置。

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class DeniroSpring5Application {    public static void main(String[] args) {        SpringApplication.run(DeniroSpring5Application.class, args);    }}

@SpringBootApplication 注解表明这是一个 SpringBoot 应用项目。

@SpringBootApplication 注解实际上是一个组合注解:

@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) })public @interface SpringBootApplication {  ...}
注解 说明
@SpringBootConfiguration 将该类声明为配置类,是 @Configuration 注解的特殊形式 。
@EnableAutoConfiguration 启用 Spring Boot的自动配置
@ComponentScan 启用组件扫描。这样配置了 @Component、@Controller、@Service 等注解的类,就会被 Spring 扫描到,然后将其注册为 Spring 上下文中的组件。

这里也顺便回顾下 Java 的元注解:

注解 说明
@Documented 把注解类型信息记录到 生成的 javadoc 文档中。
@Target(ElementType.TYPE) 说明了Annotation所修饰的对象范围,TYPE 表示用于描述类、接口(包括注解类型) 或enum声明。
@Retention(RetentionPolicy.RUNTIME) 指定注解的生命周期,RetentionPolicy.RUNTIME 表示注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在。
@Inherited 如果该注解定义在类上面时,子类会自动继承此注解。该注解只有在类上使用时才会有效。

主类中的 main 方法,调用 SpringApplication.run(DeniroSpring5Application.class, args); 执行项目引导过程,也就是创建 Spring 的应用上下文。静态的 run() 方法有两个入参,一个是配置类,另一个是命令行参数。

2 测试项目

Spring Initializr 在创建项目的同时,为我们提供了一个基本测试类:

import org.junit.jupiter.api.Test;import org.springframework.boot.test.context.SpringBootTest;@SpringBootTestclass DeniroSpring5ApplicationTests {    @Test    void contextLoads() {    }}

运行结果:

这个类中只有一个空的测试方法,虽然是空的,但会确保 Spring 应用上下文能够被正确加载。如果我们所做的修改导致 无法创建 Spring 应用上下文,那么这个测试方法就会失败。

这里使用了 org.junit.jupiter.api.Test 作为测试依赖类,这个类是 Junit 5 提供的新类。

转载地址:https://deniro.blog.csdn.net/article/details/105912744 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:说说在 IDEA 中如何使用 DevTools 与 LiveReload 实现热部署(包括代码与静态资源)
下一篇:系统架构设计笔记(24)—— 系统性能评估

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年04月27日 09时00分20秒