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

前端之家收集整理的这篇文章主要介绍了java – 关于Spring bean容器中的范围和垃圾回收前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是新来的,我正在使用它在我的一个项目.我了解到,弹簧容器保存所有的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 @H_502_27@initialization lifecycle callback methods are called on all objects regardless of scope,in the case of prototypes,configured destruction lifecycle callbacks are @H_502_27@not called.

猜你在找的Java相关文章