2015-10-01 51 views
-2

在定义分别与java <init>和finalize()方法相同的bean时,是否正在写入IOC init方法和destroy-met? 如果是这样,那么像finalize()方法被垃圾收集器调用,是否也是由GC调用的属性destroy-method中指定的方法? 何时调用destroy-method属性中的方法?Spring初始化方法和销毁方法

回答

1

不,它不会等待GC,而是要停止春季环境的明确决定。例如,如果程序员显式调用FactoryBean.destroySingletons(),或者通过调用registerShutdownHook()隐式调用,这意味着系统退出时会发生破坏。

如果你没有看到你的shutdonw方法被调用,这可能是因为你只是允许“主”线程完成而没有明确地破坏上下文。如果是(比方说)的ClassPathXmlApplicationContext,尝试上述registerShutdownHook

BTW注意它仅适用于单身作用域bean(这是默认设置,也是最常用的,类型)

1

它们没有与垃圾收集器或任何JVM生命周期链接,而是与您的容器链接。例如init-method将在实例化和属性设置后调用。另一个,当你的上下文关闭时,将会调用destroy-method。