spring中single的bean注入了一个prototype的Bean的解决方案(@Lookup)

前言:在工作中我们大多都会用spring提供的single模式的bean,当然也有prototype类型的bean。但是你们知道当一个singleton的bean,引入了一个prototype类型的bean会发生什么吗?

我们用一个小案例来说明这个情况:(这些都是最基础的代码,我就随便截图表示下,相信大家想要了解这个知识点,应该都能够看懂)

spring中single的bean注入了一个prototype的Bean的解决方案(@Lookup)

实际的结果如下:

spring中single的bean注入了一个prototype的Bean的解决方案(@Lookup)

为什么会出现这中情况,我们可以去spring官网去看看文档

spring中single的bean注入了一个prototype的Bean的解决方案(@Lookup)

spring中single的bean注入了一个prototype的Bean的解决方案(@Lookup)

英语水平有限,只能利用翻译软件翻译一下:大致原因就是我们的SingleService是单例的,只能实例一遍,它依赖的属性也就只能是单例的啦。

既然官网给出了这个问题的原因,肯定会有解决方法的,我们可以看一下官网的解决方案:

spring中single的bean注入了一个prototype的Bean的解决方案(@Lookup)

我们对着官网给的介绍,我们改造下我们的代码:

spring中single的bean注入了一个prototype的Bean的解决方案(@Lookup)

虽然这个能够解决这个问题,但是我们会觉得,我们的业务代码会和spring的耦合度太高了,不符合我们的设计原则,我们接着看看spring的官网,看看还有没有更好的解决方法:

spring中single的bean注入了一个prototype的Bean的解决方案(@Lookup)

看下我们程序的改变:

spring中single的bean注入了一个prototype的Bean的解决方案(@Lookup)

第二种方案就是spring推荐的解决方案,小伙伴是不是很简单啊,你平时遇到的问题,spring官网都会给你想到的哦。博主我之前学习技术也不喜欢看官网,但是我现在渐渐学着尝试去看官网。希望能够给上大家的帮助。顺便把官网的地址发给大家:

https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-method-injection

https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans-factory-scopes-sing-prot-interaction

觉得对你有帮助的可以点个赞或者加个关注再走哦,你们的支持是我学习的最大动力,让我们一起学习吧!!!