加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 关于Spring bean容器中的范围和垃圾回收

发布时间:2020-12-15 00:21:49 所属栏目:Java 来源:网络整理
导读:我是新来的,我正在使用它在我的一个项目.我了解到,弹簧容器保存所有的bean,默认情况下,所有bean的范围是单例.我可以在application-context.xml中或者使用@scope来更改范围. 现在我的问题是,如果将类的范围作为“原型”,弹簧容器将实例化一个新对象,每次需要
我是新来的,我正在使用它在我的一个项目.我了解到,弹簧容器保存所有的bean,默认情况下,所有bean的范围是单例.我可以在application-context.xml中或者使用@scope来更改范围.

现在我的问题是,如果将类的范围作为“原型”,弹簧容器将实例化一个新对象,每次需要一个…对吗?现在,垃圾收集如何处理.如果不再使用垃圾,垃圾是否被收集,还是将其悬挂在容器中.因为我不想在每次需要一个并加载内存的时候创建多个对象.

有人帮我理解这个.
谢谢.

解决方法

从 Spring文档( 3.5.2 The prototype scope):

In contrast to the other scopes,Spring does not manage the complete lifecycle of a prototype bean: the container instantiates,configures,and otherwise assembles a prototype object,and hands it to the client,with no further record of that prototype instance.

简单地说 – 一旦你创建并获得了对原型范围bean的引用,它就是JVM中唯一的参考.一旦这个引用超出范围,对象将被垃圾回收:

void bar() {
  Object foo = ctx.getBean("foo")
}

当你离开bar()方法的那一刻,没有任何其他引用的新的foo实例,这意味着它有资格进行垃圾收集.这种模式的结果是:

Thus,although initialization lifecycle callback methods are called on all objects regardless of scope,in the case of prototypes,configured destruction lifecycle callbacks are not called.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读