Spring Boot(05):从@Controller到@Scheduled,Spring Boot注解全家桶等你来探索!

2023-09-06 13:36:39 浏览数 (2)

代码语言:javascript复制
环境说明:Windows10   Idea2021.3.2   Jdk1.8   SpringBoot 2.3.1.RELEASE

1. 前言

        Spring Boot是Spring家族中最受欢迎的开源框架之一,它可以通过注解的方式简化开发过程,使开发人员能够更加专注于业务逻辑的实现。本文将介绍Spring Boot中常用的注解,并讲解如何轻松实现开发、测试和生产环境的切换。

2. 摘要

        本文将介绍Spring Boot中常用的注解,包括@Controller、@RestController、@RequestMapping、@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@RequestBody、@ResponseBody、@RequestParam、@PathVariable、@Configuration、@Bean、@Value、@Profile、@PropertySource、@EnableAutoConfiguration和@Conditional等。并且将通过案例演示如何使用这些注解来简化开发过程。另外,本文还将讲解如何通过配置文件实现开发、测试和生产环境的切换。

3. 常用注解

3.1 @Controller和@RestController注解

        @Controller和@RestController注解将一个POJO类标记为Spring MVC的Controller。其中,@RestController是Spring 4之后新加入的注解,它是@Controller和@ResponseBody注解的结合体。当我们使用@RestController注解时,方法的返回值将直接作为响应体返回给客户端,而不需要再使用@ResponseBody注解。

下面是一个使用@Controller注解的示例:

代码语言:javascript复制
@Controller
public class HelloWorldController {

    @RequestMapping("/hello")
    public String sayHello() {
        return "Hello World";
    }
}

        可以看到,使用@Controller注解的Controller类中的方法返回值是String类型,它指定了要渲染的视图的名称。而如果使用@RestController注解,则可以直接返回实体对象或者集合,如下所示:

代码语言:javascript复制
@RestController
public class HelloWorldRestController {

    @RequestMapping("/hello")
    public String sayHello() {
        return "Hello World";
    }
}

3.2 @RequestMapping、@GetMapping、@PostMapping、@PutMapping和@DeleteMapping注解

        @RequestMapping注解是Spring MVC中最常用的注解之一,它可以用来映射HTTP请求到Controller的处理方法。而@GetMapping、@PostMapping、@PutMapping和@DeleteMapping等注解都是RequestMapping注解的变种。

下面是一个使用@RequestMapping注解的示例:

代码语言:javascript复制
@RestController
public class HelloWorldRestController {

    @RequestMapping(value="/hello", method=RequestMethod.GET)
    public String sayHello() {
        return "Hello World";
    }
}

3.3 @RequestBody和@ResponseBody注解

        @RequestBody注解用于将HTTP请求的正文绑定到方法的参数上,而@ResponseBody注解用于将方法的返回值绑定到HTTP响应的正文上。

下面是一个使用@RequestBody和@ResponseBody注解的示例:

代码语言:javascript复制
@RestController
public class UserController {

    @PostMapping("/user")
    public User addUser(@RequestBody User user) {
        return userService.addUser(user);
    }

    @GetMapping("/user/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }
}

        可以看到,使用@RequestBody注解的方法参数会自动将HTTP请求的正文解析成指定的对象类型。而使用@ResponseBody注解的方法返回值会自动将对象序列化成JSON格式的字符串并写入HTTP响应的正文中。

3.4 @RequestParam和@PathVariable注解

        @RequestParam注解用于从HTTP请求中获取参数的值,并将其绑定到方法的参数上。而@PathVariable注解用于从URL路径中获取参数的值,并将其绑定到方法的参数上。

下面是一个使用@RequestParam和@PathVariable注解的示例:

代码语言:javascript复制
@RestController
public class UserController {

    @GetMapping("/user")
    public List<User> getUserList(@RequestParam String name) {
        return userService.getUserListByName(name);
    }

    @DeleteMapping("/user/{id}")
    public void deleteUserById(@PathVariable Long id) {
        userService.deleteUserById(id);
    }
}

        可以看到,使用@RequestParam注解的方法参数会自动从HTTP请求中获取参数值。而使用@PathVariable注解的方法参数会自动从URL路径中获取参数值。

示例截图如下:

3.5 @Configuration和@Bean注解

        @Configuration注解用于标记一个类为配置类,该类中可以包含@Bean注解的方法。@Bean注解用于将一个方法返回的对象注册到Spring容器中。

下面是一个使用@Configuration和@Bean注解的示例:

代码语言:javascript复制
@Configuration
public class AppConfig {

    @Bean
    public UserService userService() {
        return new UserServiceImpl();
    }
}

        可以看到,使用@Configuration注解的类中包含@Bean注解的方法,该方法返回一个UserService对象。当Spring容器启动时,会自动将该对象注入到容器中,我们可以使用@Autowired注解从容器中获取该对象。

示例截图如下:

3.6 @Value和@PropertySource注解

        @Value注解用于从配置文件中获取指定的属性值,并将其绑定到方法的参数上。而@PropertySource注解用于指定要读取的配置文件。

下面是一个使用@Value和@PropertySource注解的示例:

代码语言:javascript复制
@Configuration
@PropertySource("classpath:config.properties")
public class AppConfig {

    @Value("${app.name}")
    private String appName;

    @Value("${app.version}")
    private String appVersion;

    @Bean
    public AppInfo appInfo() {
        return new AppInfo(appName, appVersion);
    }
}

        可以看到,使用@Value注解的方法参数会自动从配置文件中获取指定的属性值。而使用@PropertySource注解的类会指定要读取的配置文件。当Spring容器启动时,会自动将配置文件中的属性值注入到该类中。

3.7 @Profile注解

@Profile注解用于指定一个Bean在哪些环境下才会被注册到Spring容器中。

下面是一个使用@Profile注解的示例:

代码语言:javascript复制
@Configuration
public class AppConfig {

    @Bean
    @Profile("dev")
    public DataSource dataSourceForDev() {
        return new DevDataSource();
    }

    @Bean
    @Profile("prod")
    public DataSource dataSourceForProd() {
        return new ProdDataSource();
    }
}

      可以看到,使用@Profile注解的方法只会在指定的环境下才会被注册到Spring容器中。在上面的例子中,当Spring Boot应用程序在dev环境下启动时,会注入DevDataSource对象;当Spring Boot应用程序在prod环境下启动时,会注入ProdDataSource对象。

3.8 @EnableAutoConfiguration注解

        @EnableAutoConfiguration注解可以帮助我们自动配置Spring Boot应用程序中的Bean,从而让开发者可以专注于业务逻辑的实现。

下面是一个使用@EnableAutoConfiguration注解的示例:

代码语言:javascript复制
@SpringBootApplication
public class MyApp {

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

        可以看到,使用@SpringBootApplication注解的程序类中包含了@EnableAutoConfiguration注解。当启动应用程序时,Spring Boot会自动扫描该类所在的包以及其子包,并将所有标记有@Bean注解的方法注册到Spring容器中。

3.9 @Conditional注解

        @Conditional注解可以指定一个条件,当该条件满足时,才会将Bean注册到Spring容器中。

下面是一个使用@Conditional注解的示例:

代码语言:javascript复制
@Configuration
public class AppConfig {

    @Bean
    @Conditional(MyCondition.class)
    public MyBean myBean() {
        return new MyBean();
    }
}

        可以看到,使用@Conditional注解的方法只会在指定的条件下才会被注册到Spring容器中。在上面的例子中,只有MyCondition类中的matches方法返回true时,才会将MyBean对象注册到Spring容器中。

测试用例

        本文所介绍的注解都是Spring Boot中常用的注解,使用起来非常简单。我们可以根据注解的类型和作用来编写相应。此处就不一一演示介绍了。

小结

        本文所介绍的注解都是Spring Boot中常用的注解,使用起来非常简单。主要的思路是将一个POJO类标记为Spring MVC的Controller,并使用注解来映射HTTP请求到Controller的处理方法。 

关于我

0 人点赞