您的Spring框架注释指南,请注意查收

这是关于几乎所有Spring Framework注释的简化,包括Core,Spring Cloud,Spring MVC,Spring REST和Spring Boot。
在本文中,我们将介绍Spring框架中可用的注释。

核心Spring框架注释

@Required
此注释适用于bean setter方法。考虑一个需要强制执行必需属性的方案。该 @Required 注释表明,受影响的bean必须在配置时所要求的属性来填充。否则,将BeanInitializationException 引发类型 异常。
@Autowired
此注释适用于字段,setter方法和构造函数。该 @Autowired 注释对象内喷射隐含的依赖。
当您@Autowired 在字段上使用并使用属性名称传递字段的值时,Spring会自动为字段分配传递的值。
您甚至可以@Autowired 在私有属性上使用 ,如下所示。(但是,这是非常糟糕的做法!)
public class Customer {
@Autowired
private Person person;
private int type;
}

当您@Autowired 在setter方法上使用 时,Spring会尝试通过对该方法进行类型自动装配来执行它。您正在指示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并希望仅将其中一个与属性连接时发生的混乱。
考虑一个示例,其中一个接口 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类进行配置。带有注解的Java类 @Configuration 本身就是一个配置,它将具有实例化和配置依赖项的方法。
这是一个例子:
@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 类上使用此注释 。这表明 应该延迟初始化其中的所有 @Bean 方法 @Configuration。
@Value
此注释用于字段,构造函数参数和方法参数级别。所述 @Value 注释指示该字段或参数的默认值表达式来初始化与属性。正如@Autowired 注释告诉Spring在加载应用程序上下文时将一个对象注入另一个对象一样,您也可以使用@Value 注释将属性文件中的值注入到bean的属性中。它支持#{…}和$ {…}占位符。
Spring Framework构造型注释
@Component
该注释用于类中以指示Spring组件。该@Component 注释标记的Java类作为一个bean或组件,使弹簧的扫描组件的机构可以将其添加到应用程序上下文。
@Controller
该 @Controller 注解用来指示类是一个Spring控制器。该注释可用于标识Spring MVC或Spring WebFlux的控制器。
@Service
此注释用于类。 @Service 标记执行某些服务的Java类,例如执行业务逻辑,执行计算和调用外部API。此批注是@Component 打算在服务层中使用的批注的一种特殊形式 。
@Repository
此注释用于直接访问数据库的Java类。该 @Repository 注释作品为满足仓库或数据访问对象的角色的任何类的标记。
该注释具有自动翻译功能。例如,当中发生异常时,该异常 @Repository有一个处理程序,无需添加try-catch块。
Spring Boot注释
@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 是一个方便的注释,将所有的情况如下:
 @Configuration
 @EnableAutoConfiguration
 @ComponentScan
Spring MVC和REST批注
@Controller
此注释用于在您的应用程序中扮演控制器角色的Java类上。该 @Controller 注释允许在类路径组件类,并为它们自动注册bean定义的自动检测。要启用对这些带注释的控制器的自动检测,可以将组件扫描添加到配置中。带有注释的Java类 @Controller 能够处理多个请求映射。
该注释可以与Spring MVC和Spring WebFlux一起使用。
@RequestMapping
在类和方法级别都使用此注释。该 @RequestMapping 注释用于映射Web请求到具体的处理类和处理方法。在 @RequestMapping 类级别上使用时,它将创建将使用控制器的基本URI。在方法上使用此批注时,它将为您提供将在其上执行处理程序方法的URI。由此,您可以推断出类级别的请求映射将保持不变,而每个处理程序方法将具有自己的请求映射。
有时,即使请求URI可能保持不变,您仍可能希望根据所使用的HTTP方法执行不同的操作。在这种情况下,可以使用@RequestMapping 带有HTTP方法值的method属性 来缩小HTTP方法的范围,以调用类的方法。
这是控制器和请求映射如何工作的基本示例:
@Controller
@RequestMapping("/welcome")
public class WelcomeController {
@RequestMapping(method = RequestMethod.GET)
public String welcomeAll() {
return “welcome all”;
}
}

在此示例中,/welcome 该welcomeAll() 方法仅处理对的 GET请求。
该注释也可以与Spring MVC和Spring WebFlux一起使用。
该 @RequestMapping 注释是非常灵活。请在此处查看我关于“ 请求映射”的深入文章。
@CookieValue
此注释在方法参数级别使用。 @CookieValue 用作请求映射方法的参数。HTTP cookie绑定到@CookieValue 给定cookie名称的 参数。该注释在带有注释的方法中使用 @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() {
// …
}
}

扫描二维码关注公众号,回复: 9052841 查看本文章

在此示例中, getExample() 和 getNote() 方法的maxAge均为3600秒。另外, getExample() 将仅允许来自http://example.com的跨域请求,而 getNote() 将允许来自所有主机的跨域请求。
组成的@RequestMapping变体
Spring Framework 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
此批注是方法级的批注,其作用是标识用于初始化 将请求参数绑定到JavaBean对象的WebDataBinder - 的方法 DataBinder。要自定义请求参数数据绑定,可以@InitBinder 在我们的控制器内使用带 注释的方法。带有注释的方法 @InitBinder 包括处理程序方法支持的所有参数类型。
该 @InitBinder 注释的方法将被调用每一个HTTP请求,如果你不指定这个注释元素的值。值元素可以是一个或多个表单名称,或者是应用初始绑定程序方法的请求参数。
@Mappings和@Mapping
该注释用于字段。该 @Mapping 注释是元注解,表示网络映射注解。在映射不同的字段名称时,您需要将源字段配置为它的目标字段,然后,必须添加 @Mappings 注释。此注释接受@Mapping 具有源字段和目标字段的数组 。
@MatrixVariable
该注释用于注释请求处理程序方法参数,以便Spring可以注入矩阵URI的相关位。矩阵变量可以出现在任何用分号分隔的段上。如果URL包含矩阵变量,则请求映射模式必须使用URI模板表示它们。该 @MatrixVariable 注释可确保请求与所述URI的正确矩阵变量匹配。
@PathVariable
此注释用于注释请求处理程序方法参数。该 @RequestMapping 注释可用于当某一URI值作为一个参数来处理在URI动态变化。您可以使用正则表达式指定此参数。该 @PathVariable 注释可以用来声明该参数。
@RequestAttribute
此注释用于将request属性绑定到处理程序方法参数。Spring检索命名属性的值,以填充带注释的参数@RequestAttribute。尽管 @RequestParamannotation 用来绑定查询字符串中的参数值,但 @RequestAttribute 用来访问已在服务器端填充的对象。
@RequestBody
此注释用于注释请求处理程序方法参数。所述 @RequestBody 注释指示方法参数应绑定到HTTP请求正文的值。该 HttpMessageConveter 负责从HTTP请求消息转换为对象。
@RequestHeader
此注释用于注释请求处理程序方法参数。该 @RequestHeader 注释被用于映射控制器参数以请求标头值。当Spring映射请求时,请 @RequestHeader 使用批注中指定的名称检查标头,并将其值绑定到handler方法参数。此注释可帮助您获取控制器类中的标题详细信息。
@RequestParam
此注释用于注释请求处理程序方法参数。有时,您可以在请求URL中获取参数,大部分是在GET请求中。在这种情况下,@RequestMapping 您可以将@RequestParam 注释与注释一起 使用 以检索URL参数并将其映射到方法参数。的 @RequestParam 注释用于绑定请求参数,以在控制器中的方法的参数。
@RequestPart
此注释用于注释请求处理程序方法参数。该 @RequestPart 注解可以用来代替 @RequestParam 获得一个特定多的内容,并将其绑定与注释的方法参数 @RequestPart。此注释考虑了多部分(请求部分)中的“ Content-Type”标头。
@ResponseBody
此注释用于注释请求处理程序方法。该 @ResponseBody 注释是类似 @RequestBody 注解。该 @ResponseBody 批注表示结果类型应该是在任何格式指定像JSON或XML响应体直写。Spring通过使用将该返回的对象转换为响应主体 HttpMessageConveter。
@ResponseStatus
此注释用于方法和异常类。 @ResponseStatus 用状态代码和必须返回的原因标记方法或异常类。调用处理程序方法时,状态代码将设置为HTTP响应,该响应会覆盖由任何其他方式提供的状态信息。控制器类也可以用注释 @ResponseStatus,然后由所有@RequestMapping 方法继承 。
@ControllerAdvice
此注释在类级别应用。如前所述,对于每个控制器,可以使用 @ExceptionHandler 在发生给定异常时将调用的方法。但这只能处理在其定义的控制器内发生的那些异常。为解决此问题,您现在可以使用 @ControllerAdvice 注释。此注释用于定义@ExceptionHandler,@InitBinder和 @ModelAttribute 适用于所有 @RequestMapping 方法的方法。因此,如果您@ExceptionHandler 在@ControllerAdvice 类中的方法上定义注释,则 注释 将应用于所有控制器。
@RestController
该注释在类级别使用。该 @RestController 注释标记的类作为控制器,每一个方法返回一个域对象而不是视图。通过使用此注释对类进行注释,您不再需要添加 @ResponseBody 到所有 RequestMapping 方法。这意味着您不再使用视图解析器或发送HTML作为响应。您只需以使用者可以理解的格式(例如JSON)将域对象作为HTTP响应发送。
@RestController 是结合了@Controller 和 的便捷注释 @ResponseBody。
@RestControllerAdvice
此注释适用于Java类。 @RestControllerAdvice 是结合了@ControllerAdvice 和的便捷注释 @ResponseBody。该注释与@ExceptionHandler 注释一起使用, 以处理控制器内发生的异常。
@SessionAttribute
此注释在方法参数级别使用。的 @SessionAttribute 注释用于所述方法参数的会话属性绑定。该注释提供了对现有或永久会话属性的便捷访问。
@SessionAttributes
此注释在类型级别上应用于特定处理程序。在 @SessionAtrributes 当你想添加一个JavaBean对象到一个会话注解使用。当您想让对象保持短暂会话时,将使用此方法。 @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注释
@EnableConfigServer
该注释在类级别使用。在开发具有许多服务的项目时,您需要采用一种集中且直接的方式来配置和检索要开发的所有服务的配置。使用集中式配置服务器的一个优点是,您无需负担记住每个配置在多个分布式组件中的分布位置的负担。
您可以使用Spring Cloud的 @EnableConfigServer 注释来启动其他应用程序可以与之交谈的配置服务器。
@EnableEurekaServer
此注释适用于Java类。在将应用程序分解为微服务时,您可能会遇到的一个问题是,每个服务都很难知道它所依赖的每个其他服务的地址。发现服务负责跟踪所有其他微服务的位置。
Netflix的Eureka是发现服务器的实现,并且由Spring Boot提供集成。Spring Boot通过使用注释条目类,使设计Eureka Server变得容易 @EnableEurekaServer。
@EnableDiscoveryClient
此注释适用于Java类。为了告诉任何应用程序向Eureka注册,您只需要将@EnableDiscoveryClient 注释添加 到应用程序入口点。现在已向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 Framework DataAccess批注
@Transactional
该注释放置在接口定义,接口上的方法,类定义或类上的公共方法之前。仅仅存在 @Transactional 不足以激活交易行为。该 @Transactional 是简单的元数据可以通过一些运行时基础消耗。该基础结构使用元数据来配置具有事务行为的适当bean。
注释进一步支持如下配置:
交易的传播类型
事务的隔离级别
事务包装的操作超时
只读标志-持久性提供程序的提示,该事务必须是只读的事务的回滚规则
基于缓存的注释
@Cachable
该注释用于方法。启用方法的高速缓存行为的最简单方法是使用方法进行注释, @Cacheable 并使用将结果存储在其中的高速缓存名称进行参数化。
@Cacheable(“addresses”)
public String getAddress(Book book){…}

在上面的代码段中,该方法 getAddress 与名为地址的缓存相关联。每次调用该方法时,都会检查缓存以查看调用是否已经执行并且不必重复。
@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 批注的方式:
@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框架测试注释
@BootstrapWith
此注释是类级别的注释。该 @BootstrapWith 注解用来配置Spring TestContext框架是如何自举。该批注用作元数据,以创建自定义组成的批注并减少测试套件中的配置重复。
@ContextConfiguration
此批注是一个类级批注,它定义用于确定要使用哪些配置文件来加载 ApplicationContext 测试的元数据。更具体地说, @ContextConfiguration 声明将用于加载上下文的带注释的类。您还可以告诉Spring在哪里找到文件。
@ContextConfiguration(locations={“example/test-context.xml”, loader = Custom ContextLoader.class})

@WebAppConfiguration
此注释是类级别的注释。该 @WebAppConfiguration 用于声明的是, ApplicationContext 加载的集成测试应该是一个 WebApplicationContext。此批注用于创建应用程序上下文的Web版本。重要的是要注意该注释必须与@ContextConfiguration 注释一起使用 。Web应用程序根目录的默认路径是src / main / webapp。您可以通过将其他路径传递给<span class =“ theme:classic lang:default encode:true crayon-inline”> @ WebAppConfiguration来覆盖它。
@Timed
该注释用于方法。所述 @Timed 注释指示注解的测试方法必须在指定的时间周期(以毫秒为单位)完成它的执行。如果执行超过注释中指定的时间,则测试将失败。
@Timed(millis=10000)
public void testLongRunningProcess() { … }

在此示例中,如果执行时间超过10秒,则测试将失败。
@Repeat
此注释用于测试方法。如果要自动连续运行测试方法多次,则可以使用 @Repeat 批注。注释中指定了要执行测试方法的次数。
@Repeat(10)
@Test
public void testProcessRepeatedly() { … }

在此示例中,测试将执行10次。
@Commit
此注释可以用作类级别或方法级别的注释。在执行测试方法之后,可以使用@Commit 批注来提交事务性测试方法的事务 。该注释明确传达了代码的意图。在类级别使用时,此批注定义该类中所有测试方法的提交。当声明为方法级别的注释时, @Commit 为特定的测试方法指定提交,以覆盖类级别的提交。
@RollBack
该注释既可以用作类级别的注释,也可以用作方法级别的注释。所述 @RollBack 注释指示该测试是否完成其执行后一个事务性测试方法的事务必须被回滚。如果为true, @Rollback(true)则事务回滚。否则,将提交事务。 @Commit 用于代替 @RollBack(false)。
在类级别使用时,此批注定义该类中所有测试方法的回滚。
当声明为方法级别注释时, @RollBack 为特定测试方法指定回滚,以覆盖类级别回滚语义。
@DirtiesContext
此注释同时用作类级别和方法级别的注释。 @DirtiesContext 表示Spring ApplicationContext 已以某种方式被修改或损坏,应该将其关闭。这将在执行下一个测试之前触发上下文重载。在任何带注释的方法之前或之后以及当前测试类之前或之后,ApplicationContext被标记为脏。
@DirtiesContext注释支持 BEFORE_METHOD, BEFORE_CLASS和 BEFORE_EACH_TEST_METHOD 模式,用于ApplicationContext 在测试之前关闭 。
注意:避免过度使用此注释。这是一项昂贵的操作,如果被滥用,则确实会降低测试套件的速度。
@BeforeTransaction
此注释用于注释测试类中的void方法。 @BeforeTransaction 带注释的方法指示应在任何事务开始执行之前执行它们。这意味着带有注释的方法 @BeforeTransaction 必须在带注释的任何方法之前执行 @Transactional。
@AfterTransaction
此注释用于注释测试类中的void方法。 @AfterTransaction 带注释的方法表明应在测试方法的事务结束后执行它们。这意味着 @AfterTransaction 必须在使用注释的方法之后执行用注释的方法 @Transactional。
@Sql
可以在测试类或测试方法上声明此批注,以对数据库运行SQL脚本。该 @Sql 注释配置到应该根据给定的数据库之前或集成测试方法之后执行SQL脚本资源路径。当 @Sql 在方法级别被使用,这将覆盖任何 @Sqldefined 在类级别。
@SqlConfig
该注释与@Sql 注释一起使用 。的 @SqlConfig 注释定义了被用于确定如何解析和执行经由配置SQL脚本中的元数据 @Sql 注释。在类级别使用时,此批注用作测试类中所有SQL脚本的全局配置。但是,当直接与的config属性一起使用时 @Sql, @SqlConfig 可以用作声明的SQL脚本的本地配置。
@SqlGroup
该注释用于方法。该 @SqlGroup 注释是一个容器注释,可容纳几个 @Sql 注解。该注释可以声明嵌套的 @Sql 注释。
另外, @SqlGroup 用作创建自定义组合注释的元注释。此注释也可以与可重复注释一起使用,在 @Sql 同一方法或类上可以在其中多次声明。
@SpringBootTest
该批注用于启动Spring上下文进行集成测试。这将显示完整的自动配置上下文。
@DataJpaTest
该 @DataJpaTest 注释将只提供使用内存数据库来测试弹簧数据JPA如H2所需要的自动配置。
使用此注释代替 @SpringBootTest.
@DataMongoTest
该 @DataMongoTest 会提供了一个最小的自动配置和嵌入式的MongoDB与春数据MongoDB的运行集成测试。
@WebMVCTest
该 @WebMVCTest 会弹出一个模拟Servlet环境测试MVC层。服务和组件未加载到上下文中。为了提供这些依赖性进行测试, @MockBean 通常使用注释。
@AutoConfigureMockMVC
在 @AutoConfigureMockMVC 注释工作非常类似于 @WebMVCTest 注释,但完整的春节引导上下文开始。
@MockBean
为给定的依赖项创建并注入Mockito Mock。
@JsonTest
将Spring Boot的自动配置限制为与处理JSON相关的组件。
这个注释也将自动配置的实例JacksonTester或GsonTester。
@TestPropertySource
类级别的注释,用于指定测试类的属性源。
最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。在这里插入图片描述

发布了76 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/zhaozihao594/article/details/104210430