簡體   English   中英

Spring destroy-method和half注入對象

[英]Spring destroy-method & half injected objects

在春天,我經常發現自己在bean上使用init-method和destroy-method屬性。 我很好奇這些方法的合同。 init-method屬性似乎被稱為post構造,並且在設置了所有屬性之后。 我的問題是,如果destroy-method有相同的合同。 如果setter因任何原因拋出,並且該對象沒有設置其所有屬性,spring將不會調用init-method,但是在這種情況下我找不到有關spring調用destroy-method的任何文檔。

如果它顯然確實需要檢查null,我很好奇其他人在這種情況下做了什么。

我做了一個簡單的測試,我發現如果setter拋出異常,則不會調用init和destroy方法。

我相信這是合乎邏輯的事情。 不應該允許setter失敗 - 如果確實如此,框架可以做任何事情來幫助你。 對這種錯誤的唯一反應是糾正設定者。 所以我認為你的問題無關緊要。 不應允許半注入的物體。

如果你知道setter可以拋出一個Exception,你應該捕獲它並設置null引用或者做任何其他合適的事情。

這里感興趣的Spring代碼是AbstractAutowireCapableBeanFactory.doCreateBean() (我正在查看Spring 3 M4源代碼,但它應該與Spring 2.5基本相同)。 這個方法做的最后一件事是注冊bean以便處理,只有當方法的其余部分(包括實例化和初始化)成功時才會這樣做。 因此,如果bean初始化的任何部分失敗,則不會調用destroy-method回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM