欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > springboot常用注解

springboot常用注解

2025/3/15 17:42:43 来源:https://blog.csdn.net/a378113472/article/details/146254991  浏览:    关键词:springboot常用注解
**@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=25Name: 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 是其特化版本,专门用于业务逻辑层。它们的核心功能相同,但语义和使用场景不同。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词