Spring Boot中@Bean与@Component混用探究
"这篇文档探讨了在Spring框架中同时使用@Bean和@Component注解在同一类上的情况,以及由此引发的关于Spring容器中对象实例化的疑问。文章提到,项目使用的是SpringBoot 2.0.3.RELEASE版本,问题的核心在于理解这两个注解的区别以及它们如何影响对象的创建和注入。" 在Spring框架中,`@Bean`和`@Component`都是用来注册bean到Spring容器中的,但它们的作用机制有所不同: 1. **@Component**:这是Spring的组件注解,用于标记一个Java类为Spring管理的bean。当Spring通过扫描包路径找到这个类时,会自动将它注册为bean。默认情况下,`@Component`创建的bean是单例(singleton)模式,且允许依赖注入。如果类上有无参构造函数,Spring会使用这个构造函数创建bean。 2. **@Bean**:这个注解通常用在配置类(使用`@Configuration`标记的类)中,用于声明一个方法将返回的对象作为bean。当Spring处理配置类时,会执行这些`@Bean`方法并把返回的对象注册为bean。同样,默认情况下,这些bean也是单例的。 在上述文档中提到的情况,一个类同时被`@Component`和`@Bean`标注,看似可能会导致两个不同实例的创建。但实际上,由于Spring的处理顺序,只会有一个实例被创建。Spring在处理`@Component`时,会先扫描并注册`@Component`定义的bean。然而,当遇到`@Configuration`类,Spring会进一步处理`@Bean`方法,此时`@Bean`方法的执行实际上覆盖了`@Component`的注册,因为`@Bean`方法会明确地创建一个对象实例。 在SpringBoot 2.0.3.RELEASE版本中,如果类上只有一个带参数的构造函数被调用,意味着只有一个`@Bean`创建的对象实例被Spring容器管理。这是因为Spring在处理`@Bean`时,会按照注解中指定的方式(如果有参数,则使用带参数的构造函数)来实例化对象,而忽略了`@Component`的注册。 至于为什么不是`@Component`创建的`userName`为null的`UserManager`对象,答案在于`@Bean`具有更高的优先级,它覆盖了`@Component`的默认行为。`@Bean`允许更精细的控制,包括初始化逻辑、依赖注入等,而`@Component`则更倾向于自动化和简化代码。 当`@Bean`和`@Component`同时存在时,Spring会优先考虑`@Bean`,因此在实际应用中应避免这样的混淆,以免引起不必要的复杂性。如果希望有多个实例,可以考虑使用`@Component`并配合`@Scope("prototype")`来创建多例bean。对于配置类,可以通过`@Bean`方法的重载或者使用`@Qualifier`来区分不同的bean实例。
![](https://csdnimg.cn/release/download_crawler_static/88619421/bg4.jpg)
剩余15页未读,继续阅读
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/6b2ea2d510824682ac2af676104b9caf_abackcab.jpg!1)
- 粉丝: 2402
- 资源: 5556
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- GO婚礼设计创业计划:技术驱动的婚庆服务
- 微信行业发展现状及未来发展趋势分析
- 信息技术在教育中的融合与应用策略
- 微信小程序设计规范:友好、清晰的用户体验指南
- 联鼎医疗:三级甲等医院全面容灾备份方案设计
- 构建数据指标体系:电商、社区、金融APP案例分析
- 信息技术:六年级学生制作多媒体配乐古诗教程
- 六年级学生PowerPoint音乐动画实战:制作配乐古诗演示
- 信息技术教学设计:特点与策略
- Word中制作课程表:信息技术教学设计
- Word教学:制作课程表,掌握表格基础知识
- 信息技术教研活动年度总结与成果
- 香格里拉旅游网设计解读:机遇与挑战并存
- 助理电子商务师模拟试题:设计与技术详解
- 计算机网络技术专业教学资源库建设与深圳IT产业结合
- 微信小程序开发:网络与媒体API详解
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)