我是新来的,我正在使用它在我的一个项目.我了解到,弹簧容器保存所有的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.