SPRING框架注解[spring核心—springboot — springcloud]

SPRING框架注解

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

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

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

核心Spring框架注释

@Required

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

@Autowired

此批注应用于字段,setter方法和构造函数。该 自动装配Autowired注解注入对象依赖含蓄。

当您使用 自动装配Autowired的领域,并通过使用属性名称字段中的值,Spring会自动分配与传递的值的字段。

你甚至可以使用 自动装配Autowired   私人性质,如下图所示。(虽然这是一个非常糟糕的做法!)

1

2

3

4

5

public class Customer {

    @Autowired                              

    private Person person;                  

    private int type;

}

当您使用 自动装配Autowired的setter方法,春天试图通过类型自动装配的方法来执行。您正在指示Spring应该使用setter方法启动此属性,您可以在其中添加自定义代码,例如使用此属性初始化任何其他属性。

1

2

3

4

5

6

7

public class Customer {                                                                                        

    private Person person;

    @Autowired                                                                                                      

    public void setPerson (Person person) {

     this.person=person;

    }

}

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

当您使用 自动装配Autowired上构造,构造函数注入发生在对象创建的时间。它表示用作bean时要自动装配的构造函数。这里有一点要注意的是,只有一个任何bean类的构造函数可以携带 自动装配注解。

1

2

3

4

5

6

7

8

@Component

public class Customer {

    private Person person;

    @Autowired

    public Customer (Person person) {

      this.person=person;

    }

}

注意:从Spring 4.3开始, Autowired   在具有单个构造函数的类上变为可选。在上面的例子中,春天仍然注入的实例    ,如果你省略了类 自动装配Autowired   注解。

@Qualifier

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

考虑一个示例,其中接口 BeanInterface由两个bean BeanB1和 BeanB2实现

1

2

3

4

5

6

7

8

@Component

public class BeanB1 implements BeanInterface {

  //

}

@Component

public class BeanB2 implements BeanInterface {

  //

}

现在,如果 BeanA自动装配此接口,Spring将无法知道要注入的两个实现中的哪一个。
该问题的一个解决方案是使用 Qualifier注释。

1

2

3

4

5

6

7

@Component

public class BeanA {

  @Autowired

  @Qualifier("beanB2")

  private BeanInterface dependency;

  ...

}

随着 @Qualifier 注释添加,Spring会知道自动装配哪个Bean其中 beanB2是名 BeanB2

@Configuration

此批注用于定义bean的类。 Configuration是XML配置文件中的模拟-它是用Java类配置。带注释的Java类 Configuration是通过自身的配置,将有方法来实例化和配置的依赖关系。

这是一个例子:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

@Configuration

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

这个注解使用 ComponentScan注释,让Spring知道包扫描注释组件。 ComponentScan也用于指定使用的基本包basePackageClasses或 basePackage属性进行扫描。如果未定义特定包,则将从声明此批注的类的包进行扫描。

 

@Bean

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

这是一个例子:

1

2

3

4

5

6

7

8

9

10

11

@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标志着执行一些服务,如执行业务逻辑,进行计算和调用外部的API的Java类。此注释是Component注释的一种特殊形式, 旨在用于服务层。

@Repository

此批注用于直接访问数据库的Java类。该 @Repository注释可以作为标记为满足仓库或数据访问对象的角色的任何类。

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

Spring Boot Annotations

@EnableAutoConfiguration

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

@SpringBootApplication

在设置Spring Boot项目时,此注释用于应用程序类。使用SpringBootApplication注释的类 必须保存在基础包中。SpringBootApplication所做的一件事 是组件扫描。但它只扫描其子包。例如,如果您在 com中使用@SpringBootApplication注释类 例如然后 SpringBootApplication会扫描所有的子包,

该 SpringBootApplication是一个方便的注解,增加了所有的以下内容:

  • @ Configuration
  • EnableAutoConfiguration
  • ComponentScan

Spring MVC和REST注释

@Controller

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

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

@RequestMapping

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

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

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

1

2

3

4

5

6

7

8

@Controller

@RequestMapping("/welcome")

public class WelcomeController{

  @RequestMapping(method = RequestMethod.GET)

  public String welcomeAll(){

    return "welcome all";

  }

}

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

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

该 RequestMapping   注释是非常灵活。

@CookieValue

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

JSESSIONID 418AB76CD83EF94U85YD34W

要获取cookie的值,使用 CookieValue这样的:

1

2

3

@RequestMapping("/cookieValue")

  public void getCookieValue(@CookieValue "JSESSIONID" String cookie){

}

 

@CrossOrigin

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

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

在控制器和处理程序方法级别使用@CrossOrigin的示例是这样的。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

@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 //示例.com,而 getNote 将允许所有主机跨域请求。

组成的@RequestMapping变体

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

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

@GetMapping

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

@PostMapping

此批注用于将HTTP POST请求映射到特定的处理程序方法。 PostMapping是充当一个快捷方式的构成标注 @RequestMapping 方法RequestMethod POST 

@PutMapping

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

@PatchMapping

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

@DeleteMapping

此批注用于将HTTP DELETE请求映射到特定的处理程序方法。 DeleteMapping是充当一个快捷方式用于由注释RequestMapping 方法RequestMethod DELETE 

@ExceptionHandler

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

@InitBinder

此批注是一个方法级别注释,它扮演着识别初始化WebDataBinder的方法的 角色 - 一个将请求参数绑定到JavaBean对象的 DataBinder。要自定义请求参数数据绑定,可以在控制器中使用 InitBinder注释方法。使用InitBinder注释的方法 处理方法支持的所有参数类型。
该 InitBinder注解的方法将被调用每一个HTTP请求,如果你不指定这个注释元素的值。value元素可以是应用init binder方法的单个或多个表单名称或请求参数。

@Mappings和@Mapping

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

@MatrixVariable

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

@PathVariable

此批注用于批注请求处理程序方法参数。在 RequestMapping注解可以使用其中某些URI值作为一个参数来处理在URI动态变化。您可以使用正则表达式指定此参数。该 PathVariable附注可用于声明此参数。

@RequestAttribute

此批注用于将请求属性绑定到处理程序方法参数。春天检索指定的属性值来填充带有加注解的参数 @RequestAttribute。虽然 RequestParam注解用于结合来自查询字符串中的参数值中, RequestAttribute用于访问已填充在服务器侧的对象。

@RequestBody

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

@RequestHeader

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

@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注解。这个注解用来定义 的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
考虑这个例子。

1

2

3

4

5

6

@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云计算的 EnableConfigServer注解来启动其他应用程序可以跟一个配置服务器。

@EnableEurekaServer

此批注适用于Java类。将应用程序分解为微服务时可能遇到的一个问题是,每个服务都很难知道它所依赖的每个其他服务的地址。发现服务负责跟踪所有其他微服务的位置。
Netflix的Eureka是一个发现服务器的实现,并且由Spring Boot提供集成。春天引导取得了很容易通过只是标注的入门级设计尤里卡服务器 EnableEurekaServer

@EnableDiscoveryClient

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

@EnableCircuitBreaker

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

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

@HystrixCommand

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

请考虑以下示例:

1

2

3

4

5

6

7

8

9

10

11

12

13

@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

此批注放在接口定义,接口上的方法,类定义或类的公共方法之前。仅仅出现 事务性是不够的,激活事务行为。该 事务很简单,可以通过一些运行时基础消耗元数据。此基础结构使用元数据配置具有事务行为的相应Bean。

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

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

基于缓存的注释

@Cacheable

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

1

2

@Cacheable("addresses")

public String getAddress(Book book){...}

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

@CachePut

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

1

2

@CachePut("addresses")

public String getAddress(Book book){...}

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

@CacheEvict

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

1

2

@CacheEvict(value="addresses", allEntries="true")

public String getAddress(Book book){...}

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

@CacheConfig

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

任务执行和调度注释

@Scheduled

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

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

1

2

3

4

@Scheduled(fixedDelay=5000)

public void doSomething() {

  // something that should execute periodically  

}

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

1

2

3

4

@Scheduled(fixedRate=5000)

public void doSomething() {

  // something that should execute periodically

}

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

1

2

3

4

@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框架是如何自举。此批注用作元数据以创建自定义组合注释并减少测试套件中的配置重复。

@ContextConfiguration

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

@WebAppConfiguration

此批注是类级别批注。该 WebAppConfiguration用于声明的 ApplicationContext中加载的集成测试应该是一个WebApplicationContext中。此批注用于创建应用程序上下文的Web版本。请务必注意,此注释必须与@ContextConfiguration批注一起使用 .Web应用程序根目录的默认路径为 src main webapp 可以重写通过传递一个不同的路径,以跨度 class “theme:classic lang:default decode:true crayon-inline” WebAppConfiguration

@Timed

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

1

2

@Timed(millis=10000)

public void testLongRunningProcess() {  ... }

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

@Repeat

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

1

2

3

@Repeat(10)

@Test

public void testProcessRepeatedly() {  ... }

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

@Commit

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

@Rollback

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

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

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

@DirtiesContext

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

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

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

@BeforeTransaction

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

@AfterTransaction

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

@sql

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

@SqlConfig

此注释与Sql注释一起使用 。在 SqlConfig注解定义了被用于确定如何解析和执行经由配置SQL脚本元数据的Sql注解。在类级别使用时,此批注用作测试类中所有SQL脚本的全局配置。但直接的配置属性时 的Sql, SqlConfig充当宣布SQL脚本本地配置。

@SqlGroup

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

@SpringBootTest

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

@DataJpaTest

该 DataJpaTest   注释将只提供使用内存数据库来测试弹簧数据的JPA如H2所需的自动配置。

此注释是用来代替 SpringBootTest

@DataMongoTest

该 DataMongoTest   将提供一个最小的自动配置和使用Spring数据MongoDB的运行集成测试嵌入式MongoDB的。

@WebMVCTest

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

@AutoConfigureMockMVC

该 AutoConfigureMockMVC   注释作品非常相似 WebMVCTest   注解,但充满春天引导上下文开始。

@MockBean

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

@JsonTest

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

这个注释也将自动配置的实例JacksonTesterGsonTester

@TestPropertySource

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

翻译自:

https://springframework.guru/2017/09/20/ 作者:jt

校对不易,转载请备注作者译者及出处 开发猫

 https://blog.csdn.net/qq_37939251/article/details/83238984

猜你喜欢

转载自blog.csdn.net/qq_37939251/article/details/83238984