@RunWith(SpringRunner.class)
@RunWith(SpringRunner.class)的作用表明Test测试类要使用注入的类,比如使用@Autowired注入的类,有了@RunWith(SpringRunner.class)这些类才能实例化到spring容器中,自动注入才能生效
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
通常用于Spring Boot应用程序中的集成测试。它指定了测试应该在随机端口上运行,而不是在应用程序的默认端口上。使用这个注解可以避免测试与正在运行的应用程序冲突的问题,并且可以确保测试将始终在类似于生产环境的配置下进行。
具体来说,@SpringBootTest
是在JUnit测试的上下文中启动完整的Spring应用程序上下文,即启动Spring Boot应用程序并加载所有bean。webEnvironment
参数指定要在哪种类型的Web环境中运行测试。RANDOM_PORT
模式意味着应用程序将在一个随机的可用端口上启动,而不是在默认端口上(通常为8080)。这将允许多个测试并行运行,而不必手动管理端口号或担心端口冲突。
@LocalServerPort
用于在Spring Boot测试中注入当前应用程序正在运行的端口号。它通常与 @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
一起使用,该注解指定测试应该在随机端口上运行。
在集成测试中,应用程序的端口号是在运行时分配的,并且可能会因为其他进程占用同一端口而发生变化。使用 @LocalServerPort
注解,您可以以编程方式获取实际端口号并将其用于测试。例如,您可以使用该端口号创建一个HTTP客户端来与应用程序进行交互,或者将其传递给测试中需要使用端口号的其他组件。
下面是一个使用 @LocalServerPort
注解的示例:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyIntegrationTest {
@LocalServerPort private int port;
// other test methods...
}
在此示例中,port
变量将被注入当前应用程序正在运行的端口号。
@Test
如果使用JUnit框架中的@Test注解来标记一个方法,那么该方法就会被自动识别为一个测试用例,并在执行测试时被调用。
因此,无论该方法是否被实例调用,只要运行了JUnit测试,该方法就会被自动执行。
需要注意的是,使用@Test注解标记的测试方法必须满足一定的要求,例如方法必须公共可见性(public)、没有返回值(void)、没有参数、并且不应抛出任何异常等,否则可能会导致测试失败。
@RestController
在 Spring 框架中,你可以使用 @Controller
注解来标记一个类为控制器(controller),然后在这个类中定义处理 HTTP 请求的方法。当请求到达时,Spring MVC 会根据请求 URL 去找到相应的控制器和方法来处理这个请求,并返回一个响应。
如果使用了 @ResponseBody
注解,则表示该方法返回的响应内容不是一个视图,而是一个普通对象。Spring MVC 会自动将这个对象转换成 JSON 或 XML 格式,并写入到 HTTP 响应体中。
@RestController
注解就是把这两个注解结合在一起了。它告诉 Spring MVC,这个类不仅是一个控制器,还需要将方法的返回值序列化成 JSON 或 XML 格式,并作为 HTTP 响应的主体返回给调用方。也就是说,在一个 @RestController
类中,所有方法都会被声明为 @ResponseBody
的,所以我们无需每个方法上都添加 @ResponseBody
注解。
总之,@RestController
可以帮助我们更方便地构建 RESTful web 服务。
@SpringBootApplication
@SpringBootApplication
是 Spring Boot 的核心注解之一,它是一个组合注解,包括了 @Configuration
、@EnableAutoConfiguration
和 @ComponentScan
三个注解的功能。
@Configuration
注解表示这个类是一个配置类,会被 Spring IoC 容器用来扫描和装配 Bean。@EnableAutoConfiguration
注解可以自动配置 Spring Boot 应用程序,并根据项目所添加的依赖项对应用程序进行启动配置。它使用了 Spring Boot 的自动配置机制,根据项目中存在的类和 jar 包自动配置 Spring 应用程序。@ComponentScan
注解会扫描指定包及其子包下的所有类,查找并注册容器管理的 Bean。这样就可以让 Spring Boot 自动扫描到我们写的控制器、服务等组件。
因此,通常情况下,我们在 Spring Boot 项目的启动类上都需要加上 @SpringBootApplication
注解,以便完成应用程序的基本配置和启动。
@Server
@Service
是 Spring 框架中的一个注解,通常用于标记一个类为服务层组件(service layer component)。它表示这个类是一个业务逻辑层面上的组件,用于处理具体的业务逻辑,比如对数据库进行操作。
在 Spring 应用程序中,我们通常使用 @Service
注解来标记服务层组件。当一个类被 @Service
注解修饰时,Spring 容器会自动将其识别为一个服务层组件,并将其注册到容器中管理。
例如,在下面的代码中,MyService
类使用了 @Service
注解:
java复制代码
@Service public class MyService { private final SomeThirdPartyObject someThirdPartyObject; public MyService(SomeThirdPartyObject someThirdPartyObject) { this.someThirdPartyObject = someThirdPartyObject; } // ... }
这意味着 MyService
类可以被其他组件依赖注入,并且可以通过 @Autowired
或 @Resource
注解来自动注入它所依赖的其他 Bean。此外,我们还可以在 MyService
类中定义一些业务逻辑方法,以方便对数据库或其他资源的访问和操作。
@Bean
在Spring Boot中,@Bean是用于将方法返回的对象注册为Spring应用程序上下文中的bean的注释。使用@Bean注释的方法必须在@Configuration注释的类中声明。
当Spring容器启动时,它会扫描所有已标记为@Configuration的类,并查找@Bean注释的方法。Spring容器将调用这些方法并将它们的返回值注册为bean。这些bean可以在应用程序中使用@Autowired注释来注入到其他组件中。
因此,@Bean注释提供了一种简单的方式来定义和注册bean,允许开发人员使用自定义实现来创建和管理应用程序中的对象。
@Data
@Data
是一个由 Lombok 提供的注解,它可以自动生成类的 getter、setter、toString()
、equals()
和 hashCode()
方法,减少了手写这些方法的代码量。同时,它还可以生成全参构造函数和空参构造函数。
使用 @Data
注解的类需要在类上添加 @NoArgsConstructor
和 @AllArgsConstructor
注解以生成无参和有参构造函数。此外,还需添加 @ToString
和 @EqualsAndHashCode
注解,它们会分别生成 toString()
和 equals()
和 hashCode()
方法。
总之,使用 @Data
可以轻松地生成一些常用的代码,使代码更加简洁、易读,提高开发效率。