2015-10-01 50 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。