2011-10-10 51 views
0

我一直在尋找公司的一些現有代碼,並且我看到的是applicationContext.xml文件具有UserDAO類,聲明爲一個bean,但在DAO類本身中很好已經聲明瞭getFromApplicationContext(ApplicationContext ctx),它返回DAO類本身的實例。我無法理解這個方法被調用的位置,誰在調用它。 DAO類擴展HibernateDaoSupport類 我如何知道我必須在我的類中創建此方法,因爲如果我刪除它,eclipse中的編譯器不會投訴。我想說的是應該有一個接口或抽象類,這將迫使我寫這種方法。
在ApplicationContext(Spring)中聲明的DAO類

public static UserDAO getFromApplicationContext(ApplicationContext ctx) { 
    return (UserDAO) ctx.getBean("userDAO"); 
} 

請任何能解釋一下的人。

回答

1

通常情況下,您不應該引用應用程序上下文,特別是在用戶dao這樣微不足道的情況下。

在尋找使用一些提示:

  • 使用Eclipse 「呼叫層次」(CTRL + ALT + H),看看那裏是叫
  • 使用右鍵的方法 - >引用 - > Project以查看類的使用位置

如果沒有使用,並且沒有編譯問題,並且在xml配置中沒有什麼特別的東西(如factory-method) - 刪除它。

+0

with CTRL + ALT + H我發現org.springframework.beans.factory.BeanFactory的getBean(String)正在調用這個方法。但爲什麼它仍然是一個神話。因爲GlobalDataAceess類正在使用注入到其中的UserDAO bean。 GlobalDataAccess類也在applicationContext中聲明爲bean,在Controllers中我們調用GlobalDataAccess來獲取DAO,並在其上調用方法。所以Beanactory通過調用這個mystry方法來扮演角色。 – user984281

+0

DAO執行一些界面嗎? – Bozho

+0

我真的沒有看到Spring的getBean方法如何調用這個方法,特別是沒有使用反射。我懷疑Spring有你的UserDAO類作爲依賴。 –

1

如果這個方法沒有在任何地方使用,我想你可以安全地刪除它。它看起來不像Spring自動調用的某種方法。相反,它看起來像是從應用程序上下文獲取UserDAO實例的實用方法。

這個方法很有用,因爲它避免了在任何地方硬編碼bean的名稱,但通常應該避免它,因爲Spring的全部要點是使用依賴注入,因此避免bean查找這樣。應用程序上下文可用於在啓動時獲取一次根對象。但所有其他豆類都應該注入。