本篇内容介绍了“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举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。