重新认识Spring中的@Configuration

本文对比分析了@Configuration与@Component注解在Spring框架中的作用及差异,通过实例演示了两者在bean管理上的不同行为,强调了@Configuration用于声明配置类,而@Component用于组件扫描,揭示了它们在bean生命周期管理中的关键角色。

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

前言

从前,我对@Configuration注解的认识是,使用了该注解的类就会被当做配置类,大家可以在类中对一些框架或者系统中的功能进行一些配置。
但当你问我那为什么不用@Component呢?我估计只能回答:大概是这个更具有标明性吧…
今天看了一篇优秀的博客让我对这个注解有了新的认识冲动。博客地址

代码尝试

我尝试了下两个bean调用的时候出现的情况

@Configuration标注的类的情况下:
在这里插入图片描述
根据以往的结论应该☝️有两个nice输出,但执行结果显示只执行了一次nice的方法
在这里插入图片描述


在@Component标注时

在这里插入图片描述
执行结果如预期的显示了两次
在这里插入图片描述
本文使用的是springboot2.1.7的版本@Configuration中只有一个value参数。

所以@Configuration使用后和仅@Component修改的明显区别是,前者是把bean依托于Spring进行管理,在Spring中bean默认是单例的,及时出现这样的调用也会返回已创建好的bean给调用者而不是重新创建一个。


通过改注解的注释,我们也可以了解到一些有用的官方信息

在这里插入图片描述
注释说明了本注解主要用来为Spring容器在运行的适合声明一些bean。并且也说明了bean如何进行延迟加载使用@Lazy,也说明了使用@Profile的方法。

死机小技巧

如果在bean中循环调用其他bean那就会产生一些美妙的事情

@Configuration
public class InitConfig {


    @Bean
    public String success(){
        System.out.println("success");
        return nice();
    }

    @Bean
    public String nice(){
        System.out.println("nice");
        return ok();
    }

    @Bean
    public String ok(){
        System.out.println("ok");
        return success();
    }
}

这个循环调用可和循环依赖没有什么关系。Spring可以解决循环依赖,但是这个可是死循环,必然无解,在程序启动时就会报错*_*。

小结

总结下:我们知道在@Configuration声明的类中可以使用@Bean来声明一个配置源。但是当我们在其他的带@Component标注的如@Service@Controller声明的类时,也是可以声明的,只是@bean方法在互相调用的时候不会从容器中获取了。 所以使用@Configuration向Spring提供bean才是正确的打开方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值