Spring - 如何销毁原型范围的bean?

Roy*_*ove 15 spring garbage-collection

我有一个单例bean,它有一个创建原型bean实例的方法.我正在使用此处记录的方法来获取原型bean的实例.

public class SingletonService implements ApplicationContextAware {

    private ApplicationContext applicationContext;

    public void go() {

        MyPrototypeBean prototype = applicationContext
            .getBean(MyPrototypeBean.class);

        prototype.doSomething();
    }

    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
        throws BeansException {

        this.applicationContext = applicationContext;
    }
}
Run Code Online (Sandbox Code Playgroud)

起初我认为这很好,当'go'方法返回时,我的'prototype'实例将超出范围,这意味着实例将没有引用并且将被垃圾收集.

但是,同行指出文档中的以下声明:

客户端代码必须清理原型范围的对象并释放原型bean所持有的昂贵资源.

所以听起来Spring会保留一个引用,所以gc永远不会把它拿起来?如果是这样的话,我如何告诉Spring发布引用?该文档提到我可以使用"自定义bean后处理器",但不清楚该处理器适合的位置以及它将运行的代码.

感谢所有人提前帮忙,罗伊

art*_*tol 11

我认为你误解了文档.它只是说Spring不会管理原型bean的生命周期,所以@PreDestroy(等)方法需要由你自己的代码调用.Spring不会保留引用.