springboot常用注解

发布于:2025-03-15 ⋅ 阅读:(16) ⋅ 点赞:(0)
**@Controller**:

@Controller 是传统的控制器注解,用于处理客户端发起的请求,并负责返回适当的视图(View)作为响应。
默认情况下,@Controller 注解的方法返回值会被解析为一个视图名称,
并寻找与该名称匹配的视图进行渲染。这意味着返回的结果会被解析为一个 HTML 页面或者模板引擎所需的数据。
如果需要将方法的返回值直接作为响应的主体内容(如 JSON 或 XML),
则需要在方法上使用 @ResponseBody 注解。
​**@RestController**:

@RestController 是一个组合注解,它结合了 @Controller 和 @ResponseBody 注解的功能。
在使用 @RestController 注解标记的类中,每个方法的返回值都会以 JSON 或 XML 
的形式直接写入 HTTP 响应体中,相当于在每个方法上都添加了 @ResponseBody 注解。
@RestController 适用于构建 RESTful 风格的 API,其中每个方法的返回值会直接序列化为 
JSON 或 XML 数据并发送给客户端。
@ResponseBody
主要特点:
​直接写入响应体:使用 @ResponseBody 后,方法的返回值不会被解析为视图路径,
而是直接写入 HTTP 响应的 body 区域。
​支持多种数据格式:默认情况下,Spring 会将返回值转换为 JSON 或 XML 格式,
具体取决于客户端的 Accept 请求头。
​常用于 RESTful API:@ResponseBody 通常用于构建 RESTful 风格的 API,
返回 JSON 或 XML 数据给客户端。
@RequestMapping
1.​基本功能
​映射请求:@RequestMapping 可以将特定的 URL 请求映射到控制器方法上,用于处理请求并返回响应。
​支持类和方法:可以标注在类上(定义父路径)或方法上(定义具体路径)。
类上:@RequestMapping("/api") 表示该类中的所有方法都以 /api 为父路径。
方法上:@RequestMapping("/users") 表示该方法处理 /api/users 的请求(如果类上有父路径)。
2. ​主要属性
​**value**:指定请求的 URL 路径,支持字符串数组(匹配多个路径)和路径变量(如 /users/{id})。
​**method**:指定支持的 HTTP 方法(如 RequestMethod.GET、RequestMethod.POST 等)。
​**params**:指定请求参数的条件(如 params = "name=test" 表示请求必须包含 name=test 参数)。
​**headers**:指定请求头的条件(如 headers = "Content-Type=application/json")。
​**consumes**:指定请求的媒体类型(如 consumes = "application/json")。
​**produces**:指定响应的媒体类型(如 produces = "application/json")。

派生注解
Spring 提供了更简洁的派生注解,用于简化特定 HTTP 方法的映射:

@GetMapping:处理 GET 请求。
@PostMapping:处理 POST 请求。
@PutMapping:处理 PUT 请求。
@DeleteMapping:处理 DELETE 请求。
@PatchMapping:处理 PATCH 请求。
    @RequestParam
        @GetMapping("/example")
    public String handleRequestParam(@RequestParam String name, @RequestParam int age) {
        return "Name: " + name + ", Age: " + age;
    }
    GET /example?name=John&age=25
    Name: John, Age: 25
 ---------------------------------------------------------------------------------------------------

    @RequestBody
    @PostMapping("/example")
    public String handleRequestBody(@RequestBody User user) {
        return "Received User: " + user.getName() + ", " + user.getAge();
    } POST /example
Content-Type: application/json

{
    "name": "John",
    "age": 25
}  Received User: John, 25
-------------------------------------------------------------------------------------------------------
    @PathVariable
@GetMapping("/example/{id}")
public String handlePathVariable(@PathVariable String id) {
    return "Received ID: " + id;
} GET /example/123  Received ID: 123
@Service
@Service 是 Spring 框架中的一个核心注解,用于标记一个类为业务逻辑层的服务组件。通过 @Service 注解,
Spring 容器会自动扫描并创建这些服务组件的实例,实现业务逻辑的模块化和依赖注入。
以下是关于 @Service 注解的详细说明:

1. ​作用与功能
​业务逻辑封装:@Service 注解用于标识一个类为服务层组件,通常用于处理业务逻辑,例如数据验证、业务规则执行等。
​依赖注入:被 @Service 注解标记的类可以通过 @Autowired 注解注入到其他组件中,实现松耦合的架构。
​Spring 容器管理:Spring 会自动将带有 @Service 注解的类注册为 Bean,并在需要时进行实例化和管理。
@Component  @Service 区别
`@Component``Service` 是 Spring 框架中常用的注解,它们的主要区别在于语义和使用场景,尽管在功能上它们几乎相同。以下是它们的详细对比:

### 1. **语义区别**
• **`@Component`**:  
  这是 Spring 中最通用的注解,用于标记一个类为 Spring 容器管理的组件。它没有特定的语义,适用于任何类型的组件,例如工具类、配置类等。
• **`@Service`**:  
  这是 `@Component` 的一个特化注解,专门用于标记业务逻辑层的组件。它的语义更明确,表示该类负责处理业务逻辑,例如订单处理、用户管理等。

### 2. **使用场景**
• **`@Component`**:  
  适用于那些不属于特定层(如业务层、持久层、控制层)的通用组件。例如,工具类或第三方库集成类。
• **`@Service`**:  
  专门用于业务逻辑层的类,例如处理订单、用户注册等业务逻辑的类。使用 `@Service` 可以让代码的分层结构更清晰。

### 3. **功能区别**
• **功能一致性**:  
  在功能上,`@Component``@Service` 是完全相同的。Spring 会将它们都注册为 Bean,并进行依赖注入。`@Service` 本质上是一个带有特定语义的 `@Component`。
• **异常处理**:  
  `@Service` 本身并不提供额外的功能(如事务管理),但通常与 `@Transactional` 结合使用,以管理业务逻辑中的事务。

### 4. **代码示例**
```java
// 使用 @Component 的通用组件
@Component
public class UtilityService {
    // 通用逻辑
}

// 使用 @Service 的业务逻辑组件
@Service
public class OrderService {
    // 业务逻辑
}

5. 最佳实践

分层清晰
在分层架构中,建议使用 @Service 标记业务逻辑层,@Repository 标记数据访问层,@Controller 标记控制层,而 @Component 用于通用组件。
语义优先
尽管 @Component 可以替换 @Service,但为了代码的可读性和维护性,建议根据类的职责选择合适的注解。

总结来说,@Component 是一个通用的注解,而 @Service 是其特化版本,专门用于业务逻辑层。它们的核心功能相同,但语义和使用场景不同。






网站公告

今日签到

点亮在社区的每一天
去签到