@Mapper、@Service以及@Component

在 Spring 框架中,@Mapper@Service@Component 都是用于标记类的注解,但它们的用途和适用场景不同,以下是它们的核心区别和关系:

1. @Component

  • 作用
    Spring 的通用组件注解,标记一个类为 Spring 管理的 Bean,会被自动扫描并注入到容器中。

  • 适用场景
    适用于任何需要被 Spring 管理的组件(如工具类、非业务层类)。

  • 示例

    复制代码
    @Component
    public class MyUtil {
        // 工具类逻辑
    }

2. @Service

  • 作用
    @Component特化版本 ,专门用于标记业务逻辑层(Service 层)​ 的类,++功能和 @Component 完全一致++,但语义更明确。

  • 适用场景
    明确标识业务逻辑组件,提高代码可读性。

  • 示例

    复制代码
    @Service
    public class UserService {
        // 业务逻辑代码
    }

3. @Mapper

  • 作用
    通常是 MyBatis 框架的注解 ,标记一个接口为 MyBatis 的数据映射接口(Mapper 接口)​,MyBatis 会为其动态生成实现类。

  • 与 Spring 的关系

    • 不属于 Spring 原生注解,但通过整合框架(如 MyBatis-Spring)能被 Spring 管理。
    • 需要配合 @MapperScan 注解扫描接口,或配置 MyBatis 的 Mapper 扫描路径。
  • 适用场景
    数据库操作层(DAO 层),定义 SQL 映射。

  • 示例

    复制代码
    @Mapper // MyBatis 注解
    public interface UserMapper {
        @Select("SELECT * FROM user WHERE id = #{id}")
        User findById(Long id);
    }

三者的关系

注解 所属框架 层级/用途 @Component 的关系
@Component Spring 通用组件 基础注解,其他注解的元注解
@Service Spring 业务逻辑层(Service) 继承自 @Component,语义特化
@Mapper MyBatis 数据访问层(DAO/Mapper) @Component 无关,由 MyBatis 处理

关键区别

  1. 语义不同

    • @Component 是通用组件。
    • @Service 明确标识业务逻辑。
    • @Mapper 标识数据库操作接口。
  2. 框架支持

    • @Component@Service 是 Spring 原生注解。
    • @Mapper 是 MyBatis 的注解,需依赖 MyBatis 框架。
  3. 生成方式

    • @Component@Service 的类由 Spring 直接实例化。
    • @Mapper 接口由 MyBatis 动态生成代理实现类。

什么时候用哪个?

  • @Component:通用工具类、非业务组件。
  • @Service:业务逻辑层(Service 层)。
  • @Mapper:MyBatis 的数据库操作接口(DAO 层)。
相关推荐
ZC跨境爬虫2 小时前
LeetCode 88. 合并两个有序数组(双指针详解 + Java Python 实现)
java·python·算法·leetcode
caimouse2 小时前
ReactOS 图形系统分析(17):区域填充 — EngPaint / IntEngPaint(paint.c)
c语言·开发语言·算法
北风toto3 小时前
研发效能与后端核心技术全景指南:从CI/CD到共性组件实战
java·开发语言·ci/cd
Billy121383 小时前
Day12-C++20 Coroutines(上):协程原理与Promise/Awaitable机制
开发语言·c++进阶学习
01二进制代码漫游日记3 小时前
C++基础入门速通
java·开发语言·c++
Herbert_hwt3 小时前
第六章 Java深入理解接口、函数式接口与lambda表达式
java·开发语言·算法
API快乐传递者3 小时前
电商竞品分析接口实战指南:从数据采集到决策洞察的全链路方案
java·python
橙橙笔记3 小时前
C++的学习第三部分
开发语言·c++·学习
程序员黑豆10 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
风流 少年11 小时前
Spring AI 2.0:Memory
java·后端·spring