Spring Boot - 注解
本章将详细讨论 Spring Boot 中的一些重要注解。
介绍
注解是代码的元数据。元数据是指关于数据的数据。它们通常放置在 class、method 或变量声明的上面。注解是一些以 @ 开头的字母数字值。在 class 中使用注解不会影响程序的编译或运行。当 注解用于配置时,不需要 XML 文件。
以下注解已在 Spring Boot - Configuration/Autoconfiguration 章节中讨论过。
@Component
@Configuration
@SpringBootApplication
@EnableAutoConfiguration
@ComponentScan
@AutoConfigurationPackage
@ConditionalOnClass
@ConditionalOnMissingBean
@ConditionalOnProperty
如何开启 Spring 注解?
要开启 Spring 注解,请在 XML 配置文件中 beans 声明之前添加以下行。
<context:annotation-config />
注解
@RestController
@RestController 将一个 class 标记为处理 RESTful web 请求的 controller。它结合了 @Controller 和 @ResponseBody 的功能。以下是它的作用:
@Controller− 将 class 标记为 Spring MVC controller,负责处理传入的 HTTP 请求。
@ResponseBody− 告诉 Spring 将 controller 方法的返回值直接序列化为 HTTP response body,通常以 JSON 或 XML 等格式。
HTTP 相关注解
@RequestMapping
@RequestMapping 注解用于将 web 请求映射到 controller class 中的特定 handler 方法。它充当传入 HTTP 请求与负责处理这些请求的方法之间的桥梁。您可以使用 method 属性指定方法处理的 HTTP 方法(GET、POST、PUT、DELETE 等)。
在最新的 Spring Boot 版本中,推荐使用快捷注解而不是 @RequestMapping
@GetMapping− @RequestMapping(method = RequestMethod.GET) 的快捷方式
@PostMapping− @RequestMapping(method = RequestMethod.POST) 的快捷方式
@PutMapping− @RequestMapping(method = RequestMethod.PUT) 的快捷方式
@DeleteMapping− @RequestMapping(method = RequestMethod.DELETE) 的快捷方式
@PatchMapping− @RequestMapping(method = RequestMethod.PATCH) 的快捷方式
Spring 当前支持五种内置注解来处理不同类型的传入 HTTP 请求方法,即 GET、POST、PUT、DELETE 和 PATCH。
@PathVariable
@PathVariable 将方法参数绑定到 URI 模板变量。URI 模板变量是 URI 中用花括号括起来的参数,在 URI 解析前可以被替换。
例如,在 URI 模板
'/users/{id}/{?query1,query2}'
中有三个变量:
id −必需的路径变量
query1 −可选的查询变量
query2 −另一个可选的查询变量
@RequestParam
@RequestParam 将方法参数绑定到请求参数。
@RequestBody
@RequestBody 将方法参数绑定到 HTTP 请求的 body。
@ModelAttribute
@ModelAttribute 将方法参数绑定到 model 属性。在 Spring Boot 中,model 变量是一个接口,用于保存从 controller 传递到 view 的数据。这个 Model 接口位于 org.springframework.ui 包中。
JPA 相关注解
@Repository
@Repository 将一个 class 标记为数据访问对象(DAO)。这个 class 负责对数据库执行 CRUD 操作。
@Entity
@Entity 将一个 class 标记为 JPA entity。
@Id
@Id 指定 entity 的主键。
@GeneratedValue
@GeneratedValue 指定主键的生成方式。
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
Column 将字段映射到数据库列。
@Transactional
@Transactional 将方法或 class 标记为事务性的。它确保方法(或整个 class)在事务上下文中执行。当您用 @Transactional 标记方法时,Spring 会自动为该方法处理事务管理。当您用 @Transactional 注解方法时,Spring 会在方法开始执行前启动一个事务。如果方法成功完成(无异常),Spring 会提交事务(即保存对数据库的更改)。如果发生异常,Spring 会回滚事务。要使用 @Transactional,您需要在 Spring Boot 应用程序中配置事务管理。将 @EnableTransactionManagement 添加到主应用程序 class 中。
其他重要注解
@Value
此注解用于为变量和方法参数赋值默认值。它还可以用于从 properties 文件或环境变量注入属性值。
@EnableCaching
@EnableCaching 启用缓存支持。当您将 @EnableCaching 添加到配置 class 中时,Spring 会扫描应用程序中标注了缓存相关注解(如 @Cacheable、@CachePut、@CacheEvict 或 @Caching)的方法。
@EnableAsync
@EnableAsync 启用异步方法执行支持。标注了 @Async 的方法将在单独的线程中运行,允许调用者无需等待方法完成即可继续执行。