为了账号安全,请及时绑定邮箱和手机立即绑定

有一个疑问:@Scope的变化导致控制台输出的变化,这说明了什么?(单元测试方法始终没变,最后一张图)

572d7f250001259105000300.jpg

572d7f2a0001453605000296.jpg

572d7f2b0001d94b05000271.jpg

572d7f2c000103cb05000269.jpg

最后一张图是单元测试方法,始终没变。改变的是@Scope的属性值,随之改变的是控制台输出的结果,请问为什么把作用域变成prototype,控制台就没有bean的销毁信息了?为什么加了代理,初始化信息和销毁信息都不见了?

跪求大神,大牛帮忙说一下。

正在回答

3 回答

prototype 作用域和singleton不一样,prototype不会自动销毁对象,同一个容器中每次请求都会创建新的对象。你在prototype的注解的时候,在手动关闭容器。即可输出。 加一句 ctx.registerShutdownHook(); 即可手动关闭容器销毁对象,这样就能执行到destroy的方法

0 回复 有任何疑惑可以回复我~
#1

hiberk

这里的ctx 等同于你的那个stringStroe,在你测试方法那里加上 stringStroe.registerShutdownHook();
2016-05-08 回复 有任何疑惑可以回复我~
#2

java家洼 提问者

非常感谢!
2016-05-08 回复 有任何疑惑可以回复我~

首先,关于对象回收机制,Java有自己的一套算法。一般是当对象不被使用(手动关闭,或者超过一段时间未使用。因为Java回收机制会以一个时间段扫描)就自动回收;另外,单例和静态在某种程度上是一样的。spring容器可以创建多个,一个容器里面又可以生成多个对象,如果你理解为静态,那么同一个容器的对象是一样的。但是不同容器之间的对象就不一样了(内存地址不一样),所以你这么理解也可以,那么就是静态类部类那种形式了。但是单例最主要的是的作用是线程安全!你可以看看单例模式的Java代码

0 回复 有任何疑惑可以回复我~
#1

java家洼 提问者

感谢你的耐心回答,谢谢。
2016-05-11 回复 有任何疑惑可以回复我~

另外我有我自己的理解:我觉得scope=prototype的时候,创建的对象不会随着容器的关闭而被销毁,这些对象是垃圾回收器随机销毁的吧?另外我把单例理解为static的,是和容器生死相随的。即容器被创建就有单例,容器关闭,单例就被销毁。我的理解不知道对不对?

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

有一个疑问:@Scope的变化导致控制台输出的变化,这说明了什么?(单元测试方法始终没变,最后一张图)

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号