• 当配置类用@Component不断调用@Bean注解的方法,会new出新对象,但是并不会覆盖一开始注入spring容器中的那个对象


    1.一个User类,有一个有参构造,没有@Component注解
    在这里插入图片描述2.一个UserConfiguration类,有一个@Bean,产生一个User对象userBean,重点注意:这里类上只用@Component还是只用@Configuration还是两个注解同时用是有区别的,在后面介绍
    在这里插入图片描述

    3.一个Start类,自动按类型注入一个User对象userBean,一个UserConfiguration 对象userConfiguration ,并且不断打印userBean信息,不断调用userBean()方法
    在这里插入图片描述
    这里用的@Autowired按类型注入,其实就算@Resource(name = “userBean”)或者@Autowired@Qualifier(“userBean”)按名字注入也不影响结果。

    4.测试结果①:UserConfiguration类上只用@Component,
    首先在UserConfiguration类中会执行userBean()方法,new一个user并且作为userBean注入spring容器,并且Start中自动注入的User就是这个userBean一直没有变化。Start中不断调用调用@Bean注解userBean()方法,会new出新User对象,但是并不会覆盖一开始注入spring容器中的那个对象即Start中通过@Autowired注入的userBean不会变化。(spring同一个类会可能有多个对象注入,但是@Bean应该是按名称注入容器)
    在这里插入图片描述
    5.测试结果二:UserConfiguration类上只用@Configuration或者同时用@Component和@Configuration,

    首先在UserConfiguration类中会执行userBean()方法,new一个user并且作为userBean注入spring容器,并且Start中自动注入的User就是这个userBean一直没有变化,但是Start中不断调用userBean()方法并不会执行,很奇怪,为什么呢? 有可能是@Configuration注解的类中的Bbean只会自己执行一次,别人调用并不会执行。
    在这里插入图片描述
    6.经过测试@Configuration注解的类确实已经注入到spring中了,但是@Configuration注解的类中的@Bean只会自己执行一次,别人调用并不会执行。有可能是@Configuration注解的类中的@Bean方法被拦截了。
    在这里插入图片描述
    7.Start类中调用UserConfiguration类中的普通方法callUserBean(),调用@Bean方法userBean(),callUserBean()能不断执行,也能在通过userBean()获得注入spring中的user对象,但是userBean()并不会多次执行,也是只会最开始自动执行一次。如果是其它类中想获得user对象就直接@Autowired private User userBean;就好了。
    在这里插入图片描述

    Spring @Configuration 和 @Component 区别(精简汇总版)

  • 相关阅读:
    使用Vue、ElementUI实现登录注册,配置axios全局设置,解决CORS跨域问题
    日语基础复习 Day 15
    进程-线程-协程
    软件功能点估算
    搭建Eureka高可用集群 - day03
    基于改进二进制粒子群算法的含需求响应机组组合问题研究(matlab代码)
    shell脚本如何判断上一个命令执行是否成功
    解决方案 | 法大大电子签赋能电力交易全流程电子化
    MySQL架构介绍与说明
    C++ wpf自制软件打包安装更新源码实例
  • 原文地址:https://blog.csdn.net/xiaoqj123456789/article/details/126492415