Spring框架注解指南-最好玩

 

Spring框架注解指南

这是几乎所有Spring Framework的注解,包括Core,Spring Cloud,Spring MVC,Spring REST和Spring Boot。

Java编程语言为Java 5.0以后的注释提供了支持。领先的Java框架很快就采用了注释,Spring Framework开始使用2.5版本的注释。由于它们的定义方式,注释在其声明中提供了大量上下文。

在注释之前,Spring Framework的行为很大程度上是通过XML配置来控制的。今天,注释的使用为我们配置Spring Framework的行为提供了巨大的能力。

在这篇文章中,我们将看一下Spring Framework中可用的注释。

核心Spring框架注释

@Required

此批注适用于bean setter方法。考虑一个需要强制执行必需属性的场景。@Required注释表示必须在配置时使用required属性填充受影响的bean。否则,抛出BeanInitializationException类型的异常。

Spring框架注解指南-最好玩_第1张图片

@Autowired

此批注适用于字段,setter方法和构造函数。@Autowired注释隐式注入对象依赖项。

在字段上使用@Autowired并使用属性名称传递字段的值时,Spring将自动为传递的值分配字段。

您甚至可以在私有属性上使用@Autowired,如下所示。(虽然这是一个非常糟糕的做法!)

public class Customer { @Autowired private Person person; private int type; }

当你在setter方法上使用@Autowired时,Spring会尝试通过在方法上键入autowiring来执行它。您正在指示Spring应该使用setter方法启动此属性,您可以在其中添加自定义代码,例如使用此属性初始化任何其他属性。

public class Customer { private Person person; @Autowired public void setPerson (Person person) { this.person=person; } }

 

考虑一个需要A类实例的场景,但不要在类的字段中存储A. 您只需使用A来获取B的实例,并在此字段中存储B. 在这种情况下,setter方法自动装配将更适合您。您将不会有类级未使用的字段。

在构造函数上使用@Autowired时,构造函数注入在对象创建时发生。它告诉构造函数在用作bean时自动装配。这里需要注意的一点是,任何bean类中只有一个构造函数可以携带@Autowired注释。

@Component public class Customer { private Person person; @Autowired public Customer (Person person) {	this.person=person; } }

注意:从Spring 4.3开始,@ Autowired在具有单个构造函数的类上变为可选。在上面的示例中,如果省略@Autowired注释,Spring仍会注入Person类的实例。

@Qualifier

此注释与@Autowired注释一起使用。当您需要更多控制依赖项注入过程时,可以使用@Qualifier。可以在单个构造函数参数或方法参数上指定@Qualifier。此注释用于避免在创建多个相同类型的bean并且只想使用属性连接其中一个bean时发生的混淆。

考虑一个接口BeanInterface由两个bean(BeanB1和BeanB2)实现的示例。

@Component public class BeanB1 implements BeanInterface { // } @Component public class BeanB2 implements BeanInterface { // }

 

现在,如果BeanA自动装配此接口,Spring将无法知道要注入的两个实现中的哪一个。

这个问题的一个解决方案是使用@Qualifier注释。

@Component public class BeanA { @Autowired @Qualifier("beanB2") private IBean dependency; ... }

 

随着@Qualifier注释的添加,Spring现在将知道哪个bean要自动装配,其中beanB2是BeanB2的名称。

@Configuration

此批注用于定义bean的类。@Configuration是XML配置文件的模拟 - 它是使用Java类的配置。使用@Configuration注释的Java类本身就是一个配置,它将具有实例化和配置依赖项的方法。

这是一个例子:

@Configuartion public class DataConfig { @Bean public DataSource source() { DataSource source = new OracleDataSource(); source.setURL(); source.setUser(); return source; } @Bean public PlatformTransactionManager manager() { PlatformTransactionManager manager = new BasicDataSourceTransactionManager(); manager.setDataSource(source()); return manager; } }

@ComponentScan

此批注与@Configuration批注一起使用,以允许Spring知道要扫描带注释组件的包。@ComponentScan还用于指定使用basePackageClasses或basePackage属性进行扫描的基本包。如果未定义特定包,则将从声明此批注的类的包进行扫描。

@Bean

此注释用于方法级别。@Bean注释与@Configuration一起使用来创建Spring bean。如前所述,@ Configuration将具有实例化和配置依赖关系的方法。这些方法将使用@Bean注释。使用此批注注释的方法用作bean ID,它创建并返回实际的bean。

这是一个例子:

@Configuration public class AppConfig { @Bean public Person person() { return new Person(address()); } @Bean public Address address() { return new Address(); } }

 

@Lazy

此批注用于组件类。默认情况下,会在启动时创建和配置所有自动连接的依赖项。但是如果你想懒惰地初始化一个bean,你可以在类上使用@Lazy注释。这意味着只有在首次请求时才会创建和初始化bean。您也可以在@Configuration类上使用此批注。这表明该@Configuration中的所有@Bean方法都应该被懒惰地初始化。

@Value

此注释用于字段,构造函数参数和方法参数级别。@Value注释指示用于初始化属性的字段或参数的默认值表达式。由于@Autowired注释告诉Spring在加载应用程序上下文时将对象注入另一个对象,您还可以使用@Value注释将属性文件中的值注入到bean的属性中。它支持#{...}和$ {...}占位符。

Spring框架刻板印象注释

@Component

此批注用于类以指示Spring组件。@Component注释将Java类标记为bean或组件,以便Spring的组件扫描机制可以将其添加到应用程序上下文中。

@Controller

@Controller注释用于表示该类是Spring控制器。此注释可用于标识Spring MVC或Spring WebFlux的控制器。

@Service

此批注用于类。@Service标记执行某些服务的Java类,例如执行业务逻辑,执行计算和调用外部API。此注释是@ Component注释的一种特殊形式,旨在用于服务层。

@Repository

此批注用于直接访问数据库的Java类。@Repository注释用作任何履行存储库或数据访问对象角色的类的标记。

此注释具有自动翻译功能。例如,当@Repository中发生异常时,该异常有一个处理程序,不需要添加try-catch块。

Spring Boot Annotations

@EnableAutoConfiguration

此批注通常放在主应用程序类上。@EnableAutoConfiguration批注隐式定义了基础“搜索包”。这个注释告诉Spring Boot开始根据类路径设置,其他bean和各种属性设置添加bean。

@SpringBootApplication

在设置Spring Boot项目时,此注释用于应用程序类。使用@SpringBootApplication注释的类必须保留在基础包中。@ SpringBootApplication所做的一件事是组件扫描。但它只扫描其子包。例如,如果将带有@SpringBootApplication的类注释到com.example中,则@SpringBootApplication将扫描其所有子包,例如com.example.a,com.example.b和com.example.ax

@SpringBootApplication是一个方便的注释,添加了以下所有内容:

  • @组态
  • @EnableAutoConfiguration
  • @ComponentScan

Spring MVC和REST注释

@Controller

此批注用于在您的应用程序中扮演控制器角色的Java类。@Controller注释允许在类路径中自动检测组件类,并为它们自动注册bean定义。要启用此类带注释控制器的自动检测,可以将组件扫描添加到配置中。使用@Controller注释的Java类能够处理多个请求映射。

此注释可以与Spring MVC和Spring WebFlux一起使用。

Spring框架注解指南-最好玩_第2张图片

@RequestMapping

此批注在类和方法级别使用。@RequestMapping注释用于将Web请求映射到特定的处理程序类和处理程序方法。当在类级别使用@RequestMapping时,它会创建一个将使用控制器的基URI。当在方法上使用此注释时,它将为您提供将在其上执行处理程序方法的URI。从这里,您可以推断出类级别请求映射将保持不变,而每个处理程序方法将具有自己的请求映射。

有时您可能希望基于所使用的HTTP方法执行不同的操作,即使请求URI可能保持不变。在这种情况下,您可以使用@RequestMapping的method属性和HTTP方法值来缩小HTTP方法,以便调用类的方法。

以下是控制器与请求映射一起工作的基本示例:

@Controller @RequestMapping("/welcome") public class WelcomeController { @RequestMapping(method = RequestMethod.GET) public String welcomeAll() { return "welcome all"; } }

 

在此示例中,welcomeAll()方法仅处理对/ welcome的GET请求。

此注释也可以与Spring MVC和Spring WebFlux一起使用。

@RequestMapping注释非常通用。请在此处查看我在请求映射中的深入帖子。

@CookieValue

此注释用于方法参数级别。@CookieValue用作请求映射方法的参数。HTTP cookie绑定到给定cookie名称的@CookieValue参数。此注释用于使用@RequestMapping注释的方法。
让我们考虑使用HTTP请求接收以下cookie值:

JSESSIONID=418AB76CD83EF94U85YD34W

要获取cookie的值,请使用@CookieValue,如下所示:

@ReuestMapping("/cookieValue") public void getCookieValue(@CookieValue "JSESSIONID" String cookie){ }

 

@CrossOrigin

此批注在类和方法级别使用,以启用跨源请求。在许多情况下,提供JavaScript的主机将与提供数据的主机不同。在这种情况下,跨域资源共享(CORS)支持跨域通信。要启用此通信,只需添加@CrossOrigin注释即可。

默认情况下,@ CrossOrigin注释允许所有原点,所有标题,@ RequestMapping注释中指定的HTTP方法以及30分钟的maxAge。您可以通过指定相应的属性值来自定义行为。

在控制器和处理程序方法级别使用@CrossOrigin的示例如下:

@CrossOrigin(maxAge = 3600) @RestController @RequestMapping("/account") public class AccountController { @CrossOrigin(origins = "http://example.com") @RequestMapping("/message") public Message getMessage() { // ... } @RequestMapping("/note") public Note getNote() { // ... } }

 

在此示例中,getExample()和getNote()方法的maxAge均为3600秒。此外,getExample()仅允许来自http://example.com的跨源请求,而getNote()将允许来自所有主机的跨源请求。

Spring框架注解指南-最好玩_第3张图片

@RequestMapping

Spring框架4.3引入了以下@RequestMapping注释的方法级变体,以更好地表达带注释的方法的语义。使用这些注释已成为定义端点的标准方法。它们充当@RequestMapping的包装器。

这些注释可以与Spring MVC和Spring WebFlux一起使用。

@GetMapping

此批注用于将HTTP GET请求映射到特定的处理程序方法。@GetMapping是一个组合注释,充当@RequestMapping(method = RequestMethod.GET)的快捷方式。

@PostMapping

此批注用于将HTTP POST请求映射到特定的处理程序方法。@PostMapping是一个组合注释,充当@RequestMapping(method = RequestMethod.POST)的快捷方式。

@PutMapping

此批注用于将HTTP PUT请求映射到特定的处理程序方法。@PutMapping是一个组合注释,充当@RequestMapping(method = RequestMethod.PUT)的快捷方式。

@PatchMapping

此批注用于将HTTP PATCH请求映射到特定的处理程序方法。@PatchMapping是一个组合注释,充当@RequestMapping(method = RequestMethod.PATCH)的快捷方式。

@DeleteMapping

此批注用于将HTTP DELETE请求映射到特定的处理程序方法。@DeleteMapping是一个组合注释,充当@RequestMapping(method = RequestMethod.DELETE)的快捷方式。

@ExceptionHandler

此批注在方法级别用于处理控制器级别的异常。@ExceptionHandler注释用于定义它将捕获的异常类。您可以在应该调用以处理异常的方法上使用此批注。@ExceptionHandler值可以设置为Exception类型的数组。如果抛出与列表中的某个类型匹配的异常,则将调用使用匹配的@ExceptionHandler注释的方法。

@InitBinder

此批注是一个方法级别的批注,它起着识别初始化WebDataBinder的方法的作用 - 一个将请求参数绑定到JavaBean对象的DataBinder。要自定义请求参数数据绑定,可以在控制器中使用@InitBinder注释方法。使用@InitBinder注释的方法包括处理程序方法支持的所有参数类型。

如果未指定此批注的value元素,则将为每个HTTP请求调用@InitBinder带注释的方法。value元素可以是应用init binder方法的单个或多个表单名称或请求参数。

@Mappings和@Mapping

此注释用于字段。@Mapping注释是一个元注释,表示Web映射注释。当映射不同的字段名称,则需要将源字段配置到其目标领域,要做到这一点,你必须添加@Mappings注解。此注释接受具有源字段和目标字段的@Mapping数组。

@MatrixVariable

此注释用于注释请求处理程序方法参数,以便Spring可以注入矩阵URI的相关位。矩阵变量可以出现在任何以分号分隔的段上。如果URL包含矩阵变量,则请求映射模式必须使用URI模板表示它们。@MatrixVariable注释确保请求与URI的正确矩阵变量匹配。

Spring框架注解指南-最好玩_第4张图片

@PathVariable

此批注用于批注请求处理程序方法参数。@RequestMapping注释可用于处理URI中的动态更改,其中某个URI值充当参数。您可以使用正则表达式指定此参数。可以使用@PathVariable注释声明此参数。

@RequestAttribute

此批注用于将请求属性绑定到处理程序方法参数。Spring检索命名属性的值以填充使用@RequestAttribute注释的参数。虽然使用@RequestParamannotation绑定查询字符串中的参数值,但@RequestAttribute用于访问已在服务器端填充的对象。

@RequestBody

此批注用于批注请求处理程序方法参数。@RequestBody注释指示应将方法参数绑定到HTTP请求正文的值。HttpMessageConveter负责从HTTP请求消息转换为对象。

@RequestHeader

此批注用于批注请求处理程序方法参数。@RequestHeader注释用于将控制器参数映射到请求标头值。当Spring映射请求时,@ RequestHeader使用注释中指定的名称检查标头,并将其值绑定到处理程序方法参数。此注释可帮助您获取控制器类中的标题详细信息。

Spring框架注解指南-最好玩_第5张图片

@RequestParam

此批注用于批注请求处理程序方法参数。有时您会在请求URL中获取参数,主要是在GET请求中。在这种情况下,与@RequestMapping注释一起,您可以使用@RequestParam注释来检索URL参数并将其映射到方法参数。@RequestParam注释用于将请求参数绑定到控制器中的方法参数。

@RequestPart

此批注用于批注请求处理程序方法参数。可以使用@RequestPart注释代替@RequestParam来获取特定多部分的内容,并将其绑定到使用@RequestPart注释的方法参数。此注释考虑了multipart(请求部分)中的“Content-Type”标头。

@ResponseBody

此批注用于批注请求处理程序方法。@ResponseBody注释类似于@RequestBody注释。@ResponseBody注释指示结果类型应以您指定的任何格式(如JSON或XML)直接写入响应正文中。Spring使用HttpMessageConveter将返回的对象转换为响应主体。

@ResponseStatus

此批注用于方法和异常类。@ResponseStatus标记一个方法或异常类,其中包含状态代码和必须返回的原因。调用处理程序方法时,状态代码将设置为HTTP响应,该响应将覆盖由任何其他方式提供的状态信息。控制器类也可以使用@ResponseStatus进行注释,然后由所有@RequestMapping方法继承。

@ControllerAdvice

此批注在类级别应用。如前所述,对于每个控制器,您可以对将在发生给定异常时调用的方法使用@ExceptionHandler。但是这只处理在定义它的控制器中发生的那些异常。要解决此问题,您现在可以使用@ControllerAdvice批注。此批注用于定义适用于所有@RequestMapping方法的@ExceptionHandler,@ InitBinder和@ModelAttribute方法。因此,如果在@ControllerAdvice类的方法上定义@ExceptionHandler注释,它将应用于所有控制器。

@RestController

此批注在类级别使用。@RestController注释将类标记为控制器,其中每个方法都返回一个域对象而不是视图。通过使用此批注对类进行批注,您不再需要将@ResponseBody添加到所有RequestMapping方法。这意味着您不会长时间使用视图解析器或发送HTML作为响应。您只需以消费者理解的格式(如JSON)将域对象作为HTTP响应发送。

@RestController是一个结合@Controller和@ResponseBody的便利注释。

@RestControllerAdvice

此批注适用于Java类。@RestControllerAdvice是一个结合了@ControllerAdvice和@ResponseBody的便利注释。此批注与@ExceptionHandler批注一起使用,以处理控制器中发生的异常。

@SessionAttribute

此注释用于方法参数级别。@SessionAttribute批注用于将方法参数绑定到会话属性。此批注提供了对现有或永久会话属性的便捷访问。

@SessionAttributes

此批注在特定处理程序的类型级别应用。当您要将JavaBean对象添加到会话中时,将使用@SessionAtrributes批注。当您希望将对象保持为短暂的会话时,可以使用此方法。@SessionAttributes与@ModelAttribute结合使用。

考虑这个例子:

@ModelAttribute("person") public Person getPerson() {} // within the same controller as above snippet @Controller @SeesionAttributes(value = "person", types = { Person.class }) public class PersonController {}

 

@ModelAttribute名称作为值分配给@SessionAttributes。@SessionAttributes有两个元素。value元素是模型中会话的名称,而types元素是模型中会话属性的类型。

Spring Cloud Annotations

@EnableConfigServer

此批注在类级别使用。在开发具有多种服务的项目时,您需要采用集中且直接的方式来配置和检索要开发的所有服务的配置。使用集中式配置服务器的一个优点是,您无需承担记住每个配置在多个分布式组件中的分布位置的负担。

您可以使用Spring Cloud的@EnableConfigServer批注启动其他应用程序可以与之通信的配置服务器。

@EnableEurekaServer

此批注适用于Java类。将应用程序分解为微服务时可能遇到的一个问题是,每个服务都很难知道它依赖的每个其他服务的地址。发现服务负责跟踪所有其他微服务的位置。

Netflix的Eureka是一个发现服务器的实现,并且由Spring Boot提供集成。Spring Boot通过使用@EnableEurekaServer注释入口类,可以轻松设计Eureka Server。

@EnableDiscoveryClient

此批注适用于Java类。为了告诉任何应用程序向Eureka注册自己,您只需要将@EnableDiscoveryClientannotation添加到应用程序入口点。现在在Eureka注册的应用程序使用Spring Cloud Discovery Client抽象来查询注册表以查找其自己的主机和端口。

@EnableCircuitBreaker

此批注适用于可充当断路器的Java类。当相关服务发生故障时,断路器模式可以允许微服务继续工作,从而防止故障级联。这也为失败的服务提供了恢复时间。

用@EnableCircuitBreaker注释的类将监视,打开和关闭断路器。

@HystrixCommand

此注释用于方法级别。Netflix的Hystrix库提供了Circuit Breaker模式的实现。将断路器应用于某种方法时,Hystrix会监视该方法的故障。一旦故障累积到阈值,Hystrix将打开电路,以便后续呼叫也会失败。现在,Hystrix将调用重定向到该方法,并将它们传递给指定的回退方法。

Hystrix查找使用@HystrixCommand注释注释的任何方法,并将其包装到连接到断路器的代理中,以便Hystrix可以监视它。

请考虑以下示例:

@Service public class BookService { private final RestTemplate restTemplate; public BookService(RestTemplate rest) { this.restTemplate = rest; } @HystrixCommand(fallbackMethod = "newList") public String bookList() { URI uri = URI.create("http://localhost:8081/recommended"); return this.restTemplate.getForObject(uri, String.class); } public String newList() { return "Cloud native Java"; } }

 

这里@HystrixCommand应用于原始方法bookList()。@HystrixCommand注释将newList作为回退方法。因此,出于某种原因,如果Hystrix在bookList()上打开电路,您将为用户准备一个占位符书列表。

Spring框架注解指南-最好玩_第6张图片

Spring Framework DataAccess注释

@Transactional

此批注放在接口定义,接口上的方法,类定义或类的公共方法之前。仅仅存在@Transactional不足以激活事务行为。@Transactional只是某些运行时基础结构可以使用的元数据。此基础结构使用元数据配置具有事务行为的相应Bean。

注释进一步支持以下配置:

  • 事务的传播类型
  • 事务的隔离级别
  • 事务包装的操作超时
  • 只读标志 - 持久性提供程序的提示,该事务必须只读取事务的回滚规则

基于缓存的注释

@Cacheable

此注释用于方法。为方法启用缓存行为的最简单方法是使用@Cacheable对其进行批注,并使用将存储结果的缓存名称对其进行参数化。

@Cacheable("addresses") public String getAddress(Book book){...}

 

在上面的代码段中,方法getAddress与名为addresses的缓存相关联。每次调用该方法时,都会检查缓存以查看调用是否已经执行且不必重复。

@CachePut

此注释用于方法。无论何时需要更新缓存而不干扰方法执行,都可以使用@CachePut批注。也就是说,将始终执行该方法并缓存结果。

@CachePut("addresses") public String getAddress(Book book){...}

 

强烈建议不要在同一方法上使用@CachePut和@Cacheable,因为前者强制执行以执行缓存更新,后者会导致使用缓存跳过方法执行。

@CacheEvict

此注释用于方法。并不总是希望用越来越多的数据填充缓存。有时,您可能希望删除一些缓存数据,以便可以使用一些新值填充缓存。在这种情况下,请使用@CacheEvict注释。

@CacheEvict(value="addresses", allEntries="true") public String getAddress(Book book){...}

 

这里,使用一个附加元素allEntries以及要清空的缓存名称。它设置为true,以便清除所有值并准备保存新数据。

@CacheConfig

此批注是类级别批注。@CacheConfig注释有助于在一个地方简化一些缓存信息。将此批注放在类上不会打开任何缓存操作。这允许您在类级别存储缓存配置,这样您就不必多次声明事物。

任务执行和调度注释

@Scheduled

此注释是方法级注释。@Scheduled注释用于方法以及触发器元数据。@Scheduled的方法应该具有void返回类型,不应接受任何参数。

使用@Scheduled注释的方法有很多种:

@Scheduled(fixedDelay=5000) public void doSomething() { // something that should execute periodically }

 

在这种情况下,最后一次执行结束和下一次执行开始之间的持续时间是固定的。任务总是等到上一个完成。

@Scheduled(fixedRate=5000) public void doSomething() { // something that should execute periodically }

 

在这种情况下,任务执行的开始不等待先前执行的完成。

@Scheduled(initialDelay=1000,fixedRate=5000) public void doSomething() { // something that should execute periodically after an initial delay }

 

该任务最初以延迟执行,然后以指定的固定速率继续执行。

@Async

此批注用于在单独的线程中执行每个方法的方法。@Async注释是在方法上提供的,因此该方法的调用将异步发生。与使用@Scheduled注释的方法不同,使用@Async注释的方法可以使用参数。它们将在运行时由调用者以正常方式调用,而不是由计划任务调用。

@Async可以与void返回类型方法和返回值的方法一起使用。但是,具有返回值的方法必须具有Future类型的返回值。

Spring Framework测试注释

@BootstrapWith

此批注是类级别的批注。@BootstrapWith注释用于配置Spring TestContext Framework的引导方式。此批注用作元数据以创建自定义组合注释并减少测试套件中的配置重复。

@ContextConfiguration

此批注是一个类级别批注,它定义了一个元数据,用于确定用于加载ApplicationContext以进行测试的配置文件。更具体地说,@ ContextConfiguration声明将用于加载上下文的带注释的类。您还可以告诉Spring在哪里找到该文件。

@ContextConfiguration(locations={"example/test-context.xml", loader = Custom ContextLoader.class})

 

@WebAppConfiguration

此批注是类级别批注。@WebAppConfiguration用于声明为集成测试加载的ApplicationContext应该是WebApplicationContext。此批注用于创建应用程序上下文的Web版本。请务必注意,此注释必须与@ContextConfiguration批注一起使用。Web应用程序根目录的默认路径是src / main / webapp。您可以通过将不同的路径传递给 @ WebAppConfiguration来覆盖它。

@Timed

此注释用于方法。@Timed注释表明带注释的测试方法必须在指定的时间段(以毫秒为单位)完成其执行。如果执行超过注释中的指定时间,则测试失败。

@Timed(millis=10000) public void testLongRunningProcess() { ... }

 

在此示例中,如果测试超过10秒执行,则测试将失败。

@Repeat

此注释用于测试方法。如果要自动连续多次运行测试方法,可以使用@Repeat注​​释。在注释中指定要执行测试方法的次数。

@Repeat(10) @Test public void testProcessRepeatedly() { ... }

 

在此示例中,测试将执行10次。

@Commit

此批注可以用作类级别或方法级别的批注。执行测试方法后,可以使用@Commit注释提交事务测试方法的事务。此注释明确传达了代码的意图。在类级别使用时,此批注定义了类中所有测试方法的提交。声明为方法级别注释时,@ Commit指定覆盖类级别提交的特定测试方法的提交。

@Rollback

此批注可以用作类级别和方法级别批注。@RollBack注释指示在测试完成执行后是否必须回滚事务测试方法的事务。如果这是真的,@ Rollback(true),则回滚事务。否则,提交事务。使用@Commit代替@RollBack(false)。

在类级别使用时,此批注定义了类中所有测试方法的回滚。

声明为方法级别注释时,@ RVBack指定覆盖类级别回滚语义的特定测试方法的回滚。

@DirtiesContext

此批注用作类级别和方法级别批注。@DirtiesContext表示Spring ApplicationContext已经以某种方式被修改或损坏,应该关闭它。这将在执行下一个测试之前触发上下文重新加载。ApplicationContext在任何此类带注释的方法之前或之后以及当前测试类之前或之后被标记为脏。

@DirtiesContext注释支持BEFORE_METHOD,BEFORE_CLASS和BEFORE_EACH_TEST_METHOD模式,用于在测试之前关闭ApplicationContext。

注意:避免过度使用此注释。这是一项昂贵的操作,如果被滥用,它可能会真正减慢您的测试套件。

@BeforeTransaction

此批注用于在测试类中注释void方法。@BeforeTransaction带注释的方法表明它们应该在任何事务开始执行之前执行。这意味着必须在使用@Transactional注释的任何方法之前执行使用@BeforeTransaction注释的方法。

@AfterTransaction

此批注用于在测试类中注释void方法。@AfterTransaction带注释的方法表明它们应该在事务结束后执行测试方法。这意味着必须在使用@Transactional注释的方法之后执行使用@AfterTransaction注释的方法。

@sql

可以在测试类或测试方法上声明此批注,以针​​对数据库运行SQL脚本。@Sql批注配置应该在集成测试方法之前或之后针对给定数据库执行的SQL脚本的资源路径。当在方法级别使用@Sql时,将覆盖类级别的任何@Sqldefined。

@SqlConfig

此批注与@Sql批注一起使用。@SqlConfig批注定义了用于确定如何解析和执行通过@Sql批注配置的SQL脚本的元数据。在类级别使用时,此批注用作测试类中所有SQL脚本的全局配置。但是当直接与@Sql的config属性一起使用时,@ SqlConfig用作声明的SQL脚本的本地配置。

@SqlGroup

此注释用于方法。@SqlGroup注释是一个容器注释,可以容纳多个@Sql注释。此批注可以声明嵌套的@Sql批注。
此外,@ SqlGroup用作元注释来创建自定义组合注释。此批注也可以与可重复的批注一起使用,其中@Sql可以在同一方法或类上多次声明。

@SpringBootTest

此批注用于启动Spring上下文以进行集成测试。这将带来完整的autoconfigruation上下文。

@DataJpaTest

@DataJpaTest注释仅提供使用内存数据库(如H2)测试Spring Data JPA所需的自动配置。

使用此注释代替@SpringBootTest

@DataMongoTest

@DataMongoTest将提供最小的自动配置和嵌入式MongoDB,用于运行Spring Data MongoDB的集成测试。

@WebMVCTest

@WebMVCTest将调出一个用于测试MVC层的模拟servlet上下文。服务和组件未加载到上下文中。要为测试提供这些依赖项,通常使用@MockBean批注。

@AutoConfigureMockMVC

@AutoConfigureMockMVC注释与@WebMVCTest注释的工作方式非常相似,但启动了完整的Spring Boot上下文。

@MockBean

为给定的依赖项创建并注入Mockito Mock。

@JsonTest

将Spring Boot的自动配置限制为与处理JSON相关的组件。

这个注释也将自动配置的实例JacksonTester或GsonTester。

@TestPropertySource

类级别注释,用于指定测试类的属性源。

约翰汤普森

    · 9月24日,17日 · Java Zone ·

 原文出处:https://dzone.com/articles/a-guide-to-spring-framework-annotations

Spring框架注解指南-最好玩_第7张图片

你可能感兴趣的:(Spring,注解)