小白面试题:@Component和@Bean的区别

本文探讨了SpringBoot中@Component(包括@Controller、@Service、@Repository)与@Bean注解的区别。@Component注解用于类,依赖于组件扫描,而@Bean注解更灵活,可直接在方法上使用,按需注册到Spring容器。通过@Bean,可以实现按需创建bean并处理依赖注入,如示例中展示的TransferService依赖于ProductRepository。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这两个注解的相同点是,他们都能完成创建实例,加入容器。但它们实现的方式差异很大。

@Component (@Controller @Service @Respository)作用于类class上,只有在我们的SpringBoot应用程序启用了组件扫描并且包含了被注解的类时才有效。通过组件扫描,Spring将扫描整个类路径,并将所有@Component注释类添加到Spring容器。

@Bean相对来说就更加灵活了,它可以独立加在方法method上,按需注册到spring容器。
而且如果你要用到第三方类库里面某个方法的时候,你就只能用@Bean把这个方法注册到spring容器,因为用@Component注解是要写在类中的。

=@Bean 的用法=
@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名

定义bean
下面是@Configuration里的一个事务的例子

@Configuration
public class AppConfig {

    @Bean
    public TransferService transferService() {
        return new TransferServiceImpl();
    }

}

这个配置就等同于之前在xml里的配置

<beans>
    <bean id="transferService" class="cn.tedu.TransferServiceImpl"/>
</beans>

bean的依赖
@bean 也可以依赖其他任意数量的bean,如果TransferService 依赖 AccountRepository,我们可以通过方法参数实现这个依赖

@Configuration
public class AppConfig {

    @Bean
    public TransferService transferService(ProductRepository productRepository) {
        return new TransferServiceImpl(productRepository);
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值