Bootstrap

Spring Boot教程之七: Spring Boot –注释

Spring Boot –注释

Spring Boot 注释是一种元数据形式,可提供有关 Spring 应用程序的数据。Spring Boot建立在 Spring 之上,包含 Spring 的所有功能。由于其快速的生产就绪环境,使开发人员能够直接专注于逻辑,而不必费力配置和设置,因此如今它正成为开发人员的最爱。Spring Boot 是一个基于微服务的框架,在其中创建生产就绪的应用程序只需很少的时间。以下是 Spring Boot 的一些功能:

  • 它可以避免 Spring 中繁重的 XML 配置
  • 它可以轻松维护和创建 REST 端点
  • 它包括嵌入式 Tomcat 服务器
  • 部署非常容易,war和jar文件可以轻松部署在Tomcat服务器中

Spring Boot 注解

Spring 注释存在于org.springframework.boot.autoconfigureorg.springframework.boot.autoconfigure.condition包中,通常称为 Spring Boot 注释。

Spring Boot 注解列表

此类别中可用的一些注释包括:

  • 注释:
  • 注释:
  • @EnableAutoConfiguration
  • @ComponentScan
  • 自动配置条件
    • @ConditionalOnClass 和 @ConditionalOnMissingClass
    • @ConditionalOnBean 和 @ConditionalOnMissingBean
    • @ConditionalOnProperty
    • @ConditionalOnResource
    • @ConditionalOnWebApplication 和 @ConditionalOnNotWebApplication
    • @ConditionalExpression
    • @Conditional

1. @SpringBootApplication 注解

此注解用于标记 Spring Boot 应用程序的主类。它封装了@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan注解及其默认属性。

例子:

Java

@SpringBootApplication

// Class
public class DemoApplication {

    // Main driver method
    public static void main(String[] args)
    {

        SpringApplication.run(DemoApplication.class, args);
    }
}

2. @SpringBootConfiguration 注解

它是 Spring Boot 框架的一部分,属于类级注释。它表示类提供 Spring Boot 应用程序配置。它可以用作 Spring 标准@Configuration注释的替代方案,以便可以自动找到配置。大多数 Spring Boot 应用程序通过 @SpringBootApplication 使用 @SpringBootConfiguration。如果应用程序使用 @SpringBootApplication,则它已经在使用 @SpringBootConfiguration。

例子:

Java

@SpringBootConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public StudentService studentService() {
        return new StudentServiceImpl();
    }
}

3. @EnableAutoConfiguration 注解

此注释自动配置类路径中存在的 bean。它通过从类路径中假设所需的 bean 并将其配置为运行应用程序,简化了开发人员的工作。此注释是 Spring Boot 框架的一部分。例如,当我们在类路径中说明spring-boot-starter-web依赖项时,Spring Boot 会自动配置TomcatSpring MVC。声明 @EnableAutoConfiguration 注释的类的包被视为默认包。因此,我们需要在根包中应用 @EnableAutoConfiguration 注释,以便可以检查每个子包和类。

例子:

Java

@Configuration
@EnableAutoConfiguration
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

4. @ComponentScan 注解

@ComponentScan 告诉 Spring 在哪些包中注释了应该由 Spring 管理的类。因此,例如,如果您有一个用@Controller注释的类,而该类位于 Spring 未扫描的包中,则您将无法将其用作 Spring 控制器。因此,我们可以说 @ComponentScan 使 Spring 能够扫描配置、控制器、服务和其他定义的组件。通常,@ComponentScan 注释与 @Configuration 注释一起使用,以指定 Spring 扫描组件的包。

例子:

Java

@Configuration
@ComponentScan

// Main class
public class Application {

    // Main driver method
    public static void main(String[] args)
    {

        SpringApplication.run(Application.class, args);
    }
}

5. @ConditionalOnClass 注释和 @ConditionalOnMissingClass 注释

@ConditionalOnClass 注释用于标记自动配置 bean 是否在注释参数中的类存在/不存在。

例子:

Java

@Configuration
@ConditionalOnClass(MongoDBService.class)

class MongoDBConfiguration {
    // Insert code here
}

6. @ConditionalOnBean 注释和 @ConditionalOnMissingBean 注释

这些注释用于根据特定 bean 的存在或不存在来包含 bean。

例子:

Java

@Bean
@ConditionalOnMissingBean(type = "JpaTransactionManager")

JpaTransactionManager jpaTransactionManager(
    EntityManagerFactory entityManagerFactory)
{
    // Insert code here
}

7. @ConditionalOnProperty 注释

这些注释用于根据 Spring 环境属性的存在和值来包含配置。

例子:

Java

@Bean
@ConditionalOnProperty(name = "usemongodb",
                       havingValue = "local")

DataSource
dataSource()
{
    // Insert code here
}

@Bean
@ConditionalOnProperty(name = "usemongodb",
                       havingValue = "prod")

DataSource
dataSource()
{
    // Insert code here
}

8. @ConditionalOnResource 注释

这些注释用于仅当类路径中存在特定资源时才包含配置。

例子:

Java

@ConditionalOnResource(resources = "classpath:mongodb.properties")

Properties
additionalProperties()
{
    // Insert code here
}

9. @ConditionalOnExpression 注释

这些注释用于根据SpEL(Spring 表达语言)表达式的结果包含配置。

SpEL(Spring Expression Language):它是一种强大的表达语言,支持在运行时查询和操作对象图。

例子:

Java

@Bean
@ConditionalOnExpression("${env} && ${havingValue == 'local'}")

DataSource dataSource() 
{
    // Insert code here
}

10. @ConditionalOnCloudPlatform 注释

这些注释用于让指定的云平台处于活动状态时包含配置。

例子:

Java

@Configuration
@ConditionalOnCloudPlatform(CloudPlatform.CLOUD_FOUNDRY)

public class CloudConfigurationExample 
{
  // Insert code here
}

请求处理和控制器注释:

属于此类别的一些重要注释包括:

  • @控制器
  • @RestController
  • @RequestMapping
  • @RequestParam
  • @PathVariable
  • @RequestBody
  • @ResponseBody
  • @ModelAttribute

1. @Controller 注解

此注释提供Spring MVC功能。它用于创建 Controller 类,同时处理 HTTP 请求。通常,我们使用@Controller注释和@RequestMapping注释将 HTTP 请求与控制器类中的方法进行映射。

例子:

Java

//Create a Java class and use @Controller annotation to make it controller class
@Controller
public class MyController{
  public String GFG(){
    //insert code here
  }
}

2. @RestController 注释

此注释用于处理 REST API,例如 GET、PUT、POST、DELETE 等,也用于使用 Spring MVC 创建 RESTful Web 服务。

它封装了@Controller注释和@ResponseBody注释及其默认属性。

@RestController = @Controller + @ResponseBody

例子:

Java

//Create a Java class and use @RestController annotation
// to make the class as a request handler
@RestController
public class HelloController{
  public String GFG(){
    //insert code here
  }
}

3. @RequestMapping 注解

此注解用于将 HTTP 请求与控制器类内的处理程序方法映射。

例子:

Java

//Java program to demonstrate @RequestMapping annotation
@RestController
public class MyController{
  @RequestMapping(value=" ",method=RequestMapping.GET)
  public String GFG(){
    //insert code here
  }
}

为了处理特定的 HTTP 请求,我们可以使用

  • @GetMapping
  • @PutMapping
  • @PostMapping
  • @PatchMapping
  • @DeleteMapping

注意:我们可以手动使用 GET、POST、PUT 和 DELETE 注释以及路径,也可以将 @RequestMapping 注释与方法结合使用,以处理上述所有处理程序请求

4. @RequestParam 注解

此注释主要用于从 URI 获取参数。换句话说,我们可以说@RequestParam注释用于读取表单数据并将 Web 请求参数绑定到特定的控制器方法。

例子:

Java

//Java code to demonstrate @RequestParam annotation
@RestController
public class MyController{
  
  @GetMapping("/authors")
  public String getAuthors(@RequestParam(name="authorName") String name){
    //insert code here
  }
}

5. @PathVariable 注释

此注解用于从 URI 路径中提取数据。它将 URL 模板路径变量与方法变量绑定。

例子:

//Java Program to Demonstrate @PathVariable annotation
@RestController
public class MyController{
  
    @GetMapping("/author/{authorName}")
    public String getAuthorName(@PathVariable(name = "authorName") String name){
      //insert your code here
    }
  
}

6. @RequestBody 注解

此注释用于将 HTTP 请求从传入的 JSON 格式转换为直接从请求主体开始的域对象。此处方法参数与 HTTP 请求主体绑定。

例子:

Java

// Java Code to Demonstrate @RequestBody annotation
@RestController
public class MyController{
  
  @GetMapping("/author")
  public void printAuthor(@RequestBody Author author){
    //insert code here
  }
}

7. @ResponseBody 注解

此注解用于将域对象转换为 JSON 或其他文本形式的 HTTP 请求。这里,方法的返回类型与 HTTP 响应主体绑定。

Java

//Java code to demonstrate @ResponseBody annotation
@Controller
public class MyController{
  
  public @ResponseBody Author getAuthor(){
    Author author = new Author();
    author.setName("GFG");
    author.setAge(20);
    return author;
  }
}

8. @ModelAttribute 注释

此注解引用 Spring MVC 中的模型对象。它也可以用于方法或方法参数。

例子:

@ModelAttribute("author")
public Author author(){
  //insert code here
}

这里,我们不需要明确地将对象添加到模型中,因为对象将自动成为属性的一部分。

;