2013-11-14 79 views
1

我必須加載一個屬性文件,並在運行時確定其路徑,並指出屬性文件格式。這意味着我不能指定位置。我有一個屬性加載器類,它讀取文件並將其轉換爲鍵值對。在過去,我會通過實現ApplicationContextInitializer來完成此任務,但在此應用程序中,我使用的是配置類,並且沒有web.xml文件來註冊此偵聽器。我如何利用@EnableWebMvc配置類的啓動過程來調用我的屬性加載器類,並將它返回的映射添加爲proeprty源。 任何幫助,將不勝感激。在配置類中添加屬性源

回答

1

掛鉤的ApplicationContextListener成一個Servlet 3.0的環境中,你可以做的兩種方式這一個:

  • 包括web.xml文件或網頁fragment.xml之定義了contextInitializerClasses的context-param,其值是實現的類名稱。您可以同時標註,要麼/無論是在你的web應用這些部署描述符(在XML文件比註釋類優先級數字的)
  • 通話setInitParameter("contextInitializerClasses", MyImplementingInitializer.class.getName())方法從實現WebApplicationInitializer一類ServletContext類,有註釋類@Order(1)以確保它先於其他WebApplicationInitializer小號
+0

我想我還需要實現ApplicationContextInitializer以訪問ConfigurableWebApplicationContext添加proprerty源運行。我如何在沒有web.xml的情況下注冊這個監聽器 – adeelmahmood

+0

爲什麼不能通過定義@Configuration類來添加定義,並在重寫getRootConfigClasses()時指定該類?爲什麼您需要使用ApplicationContextInitializer? –

+0

沒關係,所以我試圖做的確切的事情是在啓動時加載一個文件在管道分隔形式。我需要讀取文件並將管道分隔的數據轉換爲地圖,然後將該地圖加載爲另一個PopertySource。我在過去做過的一種方法是在Webxml中註冊ApplicationContextInitializer,然後由於在這個類中我可以訪問上下文和環境,所以我可以加載這些proeprties ..我所需要做的就是點擊啓動進程,同時訪問applicationContext和environmetn對象添加屬性源 – adeelmahmood