Spring怎么为singleton bean注入prototype bean


本篇内容介绍了“Spring怎么为singletonbean注入prototypebean”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Ubuntu 22.04IntelliJ IDEA 2022.1.3JDK 17.0.3Spring 5.3.21创建Maven项目 test0707 。修改 pom.xml 文件,添加依赖:创建如下POJO:Book免费云主机域名Book接口;PlayBook :Book实现类;StudyBook :Book实现类;Student1 :Student1持有Book;在 src/main/resources 目录下创建 applicationContext.xml 文件:在 src/test/java 目录下创建测试public class Test0707 {}创建测试用例:运行测试,如下:Student1 constructor
PlayBook constructor总结:singleton的bean会在Spring初始化时创建实例(如本例中的 student1 );prototype的bean不会在Spring初始化时创建实例(如本例中的 studyBook );若把A注入B(B是singleton),则A在Spring初始化时随着B一起创建实例(如本例中的 playBook )。接上条,若把A注入B(B是singleton),如果A是singleton,则A在B之前创建实例。如果A是prototype,则A在B之后创建实例;创建测试用例:运行测试,如下:Student1 constructor
PlayBook constructor
before getBean student1 playBook
true
PlayBook constructor
PlayBook constructor
false总结:singleton的bean,只在Spring初始化时创建实例, getBean() 不会创建实例;prototype的bean,不在Spring初始化时创建实例(注入例外),每次 getBean() 都会创建实例;创建测试用例:运行测试,如下:Student1 constructor
PlayBook constructor
before getBean student1
true
true总结:把prototype的bean注入到singleton,多次调用 getBean() 获取后者时,得到的是同一实例,同理,其持有的前者,也是同一实例。多次调用 getBean() 方法获取singleton bean时,对于所注入的prototype的bean,如果希望每次都获取一个新的bean实例,可以使用 lookup-method 来配置。例如:完整例子如下:创建POJO Student2 :在 applicationContext.xml 文件中注册bean:创建测试用例:运行测试,如下:……
Student2 constructor
before getBean student2
true
PlayBook constructor
PlayBook constructor
false总结:Student2 是抽象类, getBook() 是抽象方法;Student2 并不持有Book,只需使用 getBook() 方法来得到Book;在Spring配置中使用 lookup-method 来指定方法名字( name 属性)和所获取的bean( bean 属性);getBook() 是Spring实现的,相当于调用了getBean() 方法来得到实例,所以每次都能获取一个新的实例(当然前提是bean必须是prototype的);singleton bean在Spring初始化时创建实例,lookup的bean不会随着一起创建实例,只有在显式调用lookup方法时才会 getBean() (类似懒加载);“Spring怎么为singletonbean注入prototypebean”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!

相关推荐: SpringBoot如何使用axis调用webservice接口

本篇内容介绍了“SpringBoot如何使用axis调用webservice接口”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!通过度娘等方式,个人理解为变相的s…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/20 19:18
下一篇 03/20 19:18

相关推荐