环境说明: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的处理方法。