@Component是Spring的通用组件注解,用于将Java类声明为Spring容器管理的Bean,是@Service、@Repository、@Controller的底层基础;默认bean名为类名首字母小写,支持自定义名称,需配合@ComponentScan启用扫描。

@Component 是 Spring 提供的通用组件注解,用于将一个普通 Java 类标记为 Spring 容器管理的 Bean。它属于构造型(stereotype)注解,是 @Service、@Repository、@Controller 的底层基础。
基本用法:加注解 + 开启组件扫描
只需两步即可让类被 Spring 管理:
- 在类上添加
@Component注解(可选指定 bean 名称,如@Component("myUtil")) - 确保该类所在的包在 Spring 的组件扫描路径内(通过
@ComponentScan或 XML 配置)
例如:
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
public class EmailSender {
public void send(String to) {
System.out.println("Email sent to " + to);
}
}
bean 名称的默认规则
如果不指定名称,Spring 会将类名首字母小写作为 bean 名称:
立即学习“Java免费学习笔记(深入)”;
-
EmailSender→ 默认 bean 名为emailSender -
PDFGenerator→ 默认 bean 名为pDFGenerator(注意:遵循 Java Bean 首字母大写驼峰转小写规则,不是简单小写) - 若想明确控制名称,直接传入字符串:
@Component("emailService")
与 @Service / @Repository / @Controller 的区别
它们本质都是 @Component 的特化形式,语义更清晰:
-
@Service:标识业务逻辑层组件 -
@Repository:标识数据访问层组件(还自带异常转换功能) -
@Controller:标识 Web 层处理器(配合 MVC 自动注册为 Handler) - 三者均可被
@ComponentScan扫描到,且能被@Autowired注入
注意事项
- 类必须是具体类(不能是抽象类或接口)
- 类不能是 final 的(否则 CGLIB 代理可能失败,尤其在 AOP 场景下)
- 确保配置类或启动类上有
@ComponentScan(Spring Boot 默认扫描主类所在包及其子包) - 如果类在扫描范围外,即使加了
@Component也不会被加载

















