2015年7月24日 星期五

[Spring] ApplicationContext 與 WebApplicationContext的差異

  • ApplicationContext
applicationContext.xml檔是每個web應用程的root context設定。Spring會載入此檔案並為整個應用程式建立ApplicationContext。一個web應用程式,只會有一個ApplicationContext。

如果你沒有在web.xml檔中,使用contextConfigLocation參數指定context設定檔的話,Spring會在應用程式啟動時,至WEB-INF目錄中尋找applicationContext.xml檔,找不到時則會丟出FileNotFoundException 例外。

在Spring的BeanFactory生命週期裡,ApplicationContext會偵測並呼叫所有有實作ApplicationContextAware的bean。

  • WebApplicationContext
與ApplicationContext不同,一個web應用程式可以有多個WebApplicationContext。

簡單來說,1個DispatcherServlet擁有1個對應的WebApplicationContxt;每個DispatcherServlet有自己的xxx-servlet.xml設定檔;單個web應用程式是在web.xml檔裡,設定多個DispatcherServlet來負責處理reqeust。

Spring預設會載入WEB-INF目錄下的“xxx-servlet.xml”檔,xxx為在web.xml中的servlet名稱,你亦可在web.xml中使用contextConfigLocation參數,來改變xml檔的檔名或路徑。

WebApplicationContext 的實作會偵測所有有實作ServletContextAware界面的bean,並呼叫其setServletContext方法。


Spring ContextLoaderListener And DispatcherServlet Concepts這篇文章有實際的ApplicationContext設定舉例說明,及更詳盡的Spring web應用程式啟動的運作介紹,有興趣的話,可以參考。

參考文章:
1) http://stackoverflow.com/a/29629824
2) Interface ApplicationContext
3) Interface WebApplicationContext

2015年7月18日 星期六

[Junit] exception java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

之前使用junit-4.12.jar,只用了自訂test開頭的method,及@FixMethodOrder(MethodSorters.NAME_ASCENDING)的annotation,沒有出現任何例外,直到用了annotation @RunWith,卻發生java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing錯誤

[Eclipse] User Library 設定的儲存位置與匯入匯出

在當前workspace下寫程式,如何不切換workspace,來取得另一workspace的user library設定呢?