spring通过注解实现组件扫描与装配:启用@componentscan指定扫描路径,用@component及其衍生注解标记组件,@autowired等注入依赖,@scope控制作用域,@postconstruct/@predestroy管理生命周期。

Spring 通过注解实现组件扫描与装配,核心是启用自动扫描、标记可被管理的类、并按需注入依赖。不需要 XML 配置文件,纯注解驱动即可完成 Bean 的发现与装配。
启用组件扫描(@ComponentScan)
在配置类或启动类上添加 @ComponentScan,告诉 Spring 去哪些包路径下查找带组件注解的类。
- 默认扫描当前包及其子包:直接加 @ComponentScan 即可
- 指定扫描路径:用 basePackages 或 basePackageClasses 属性限定范围,避免全项目扫描影响启动速度
- 常与 @Configuration 和 @SpringBootApplication 一起使用;后者已内置 @ComponentScan,所以 Spring Boot 项目通常无需显式声明
标记可被扫描的组件(@Component 及衍生注解)
Spring 提供多种语义化注解,让类具备“可被扫描+注册为 Bean”的能力:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
- @Component:通用组件,适用于任何自定义类
- @Service:标注业务逻辑层类(本质是 @Component 的特化)
- @Repository:标注数据访问层类,自带异常转换支持
- @Controller 或 @RestController:标注 Web 层处理器,配合 MVC 使用
- 所有这些注解都默认使用类名首字母小写作为 Bean 名,也可用 value 属性自定义,如 @Service("userBiz")
实现依赖注入(@Autowired、@Resource、@Qualifier)
Spring 支持多种方式把已扫描的 Bean 注入到其他 Bean 中:
- @Autowired:按类型(byType)注入,默认要求匹配到唯一 Bean;配合 @Qualifier("beanName") 可按名称(byName)精确指定
- @Resource(JSR-250):默认按名称注入,找不到再按类型;可通过 name 属性显式指定 Bean 名
- 推荐构造器注入:在构造方法参数上加 @Autowired(Spring 4.3+ 可省略该注解),更利于不可变性和单元测试
- 字段注入虽简洁,但不利于测试和违反单一职责;Setter 注入适用可选依赖场景
控制 Bean 的作用域与生命周期(@Scope、@PostConstruct、@PreDestroy)
除了发现和装配,还可细粒度控制 Bean 行为:
- @Scope("prototype"):让每次获取都创建新实例;默认是 singleton(单例)
- @PostConstruct:标注初始化方法,在依赖注入完成后、Bean 可用前执行
- @PreDestroy:标注销毁前回调方法,仅对 singleton Bean 有效
- 若使用 Java 配置类,也可用 @Bean 方法 + 方法参数自动装配,灵活组合已有 Bean
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










