学习SpringBoot时候遇到的一些问题以及猜想

今天在测试多种Springboot注入bean时候意外发现了这个问题

这是我的config配置

这是我的lombok_pojo_pet类的配置

这是我的属性配置

 

 这是主类

这是运行结果

发现了什么没 

这里面有两个lombok_pojo_pet类型的bean,分别是通过属性绑定的lombok_pojo_pet和通过new建立的tomcat

这两个明明赋予了不同的数值,但是最后输出的结果一模一样,莫非是因为属性绑定优先一切,所以将tg prc两个属性覆盖掉了?

但是不对,people里面使用pet()赋值之后获得的数值却是tg prc

那么我们接着打debug查看

第一个断点我打在了student里面赋值部分,这里面我们注意到赋值并非是直接调用bean,而是用pet方法,其地址为5207

 这里两个bean对应的数值完全一样,但是地址不一样,而且跟之前pet()方法返回的数值也不一样

 由于我使用的是多例模式,我突然想到如果是单例的话结果会怎样

结果如下

 

 发现什么了没有,这一次pet()返回的地址跟l2完全一样了,而数值上tg prc被覆盖掉了

由于我本人能力不足,无法完全深入源码进行解析,但是我们都知道,地址才是存贮的具体数值,tomcat这个名称是一个指针,故我做出如下猜想

创建bean的时候,由于bean的名称是唯一的,所以在多例模式下的赋值情况类似于

int i=4

i=5

第一次调用pet()的时候,我相当于设定了一个tomcat的数值为tg prc。这个数值被set方法注入到了people中保存,但是由于我开始属性注入,后面调用tomcat这个bean时候属性解析的数值将其覆盖

单例模式下,会先对tomcat这个bean进行正常注入,随后给所有lombok_pojo_pet统一注入数值,确保唯一性

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值