@Component 与 @Bean 核心区别
@Component 与 @Bean 核心区别
一、核心定位与作用层级
- @Component:类级别注解,仅用于标记自定义类,靠 Spring 自动扫描注册 @ComponentScan
- @Bean:方法级别注解,需写在 @Configuration 类的方法中,注册任意类(含第三方库,如数据源、RestTemplate),靠方法返回值实例化
二、核心差异
对比维度 | @Component | @Bean |
注册方式 | 自动扫描 ( 依赖 @ComponentScan) | 手动定义(显式写方法控制) |
依赖注入 | @Autowired 自动注入 | 方法参数 显式注入 |
灵活性 | 低( 无自定义实例化逻辑) | 高 (支持 @Conditional 条件创建、 @Scope 作用域配置) |
- 当没有显式配置 @ComponentScan 时,Spring Boot 会默认扫描主启动类(有 @SpringBootApplication 注解的类)所在的包及其所有子包
- 可以自动发现并注册该范围内的 @Component、@Service、@Repository、@Controller 等组件
- 如果组件位于默认扫描路径之外,就需要通过 @ComponentScan 注解手动指定这些组件所在的包