天天看點

基于純Java代碼的Spring容器和Web容器零配置的思考和實作(2) - 靜态資源、視圖和消息器

我們知道,Spring的配置分為兩個部分,

一部分是配置Spring容器,一般配置在applicationContext.xml。

另一部分是Web容器,也叫Web子容器,一般配置在xxx-servlet.xml。

是以,遵循配置分離的原則,我們提供兩個類來分别代替這兩個XML檔案。

我們首先提供一個SpringContextConfig類,這個類用于配置原本配置在applicationContext.xml中的資訊。由于我們已經将資料源和事務管理器的配置單獨配置到了DBConfig,對于最基本配置這個範圍而言,這個類暫時沒有其他的東西需要配置。當然以後我們自定義的一些需要Spring管理的内容可以在這裡配置。比如我在這裡面配置了一個RPC工具,源碼如下:

我們接着提供一個WebContextConfig類,這個類用于配置原本配置在xxx-servlet.xml中的資訊。我們需要繼承org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter這個抽象類,

通過重寫其void addResourceHandlers(ResourceHandlerRegistry registry)方法實作靜态資源過濾,

重寫void addInterceptors(InterceptorRegistry registry)方法來配置我們的監聽器。

我們先給出源碼,再對源碼作出解釋:

我們首先配置了靜态資源所在位置和請求路徑,以避免靜态資源被攔截成請求。

重寫的void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer)方法是為了開啟預設處理靜态資源的Servlet。

然後我們配置了JSP和FreeMarker兩種視圖解析器,通過設定order屬性來配置其優先級,當找不到優先級高的視圖時會自動搜尋下一優先級的視圖。

最後就是最重要的消息轉換器的配置了。

我們知道,Spring是預設注冊了這幾個消息轉換器的,那為什麼我們還需要配置一次呢?

衆所周知,Java8以前的時間API是設計的很喪心病狂的,我們通常需要花費大量的精力去處理時間格式。

而Spring預設配置的Json消息轉換器的日期格式并不是我們需要的"yyyy-MM-dd HH:mm:ss"格式,是以為了統一我們在JSON傳回時間時格式統一,我們在采用的Json轉換工具Jackson的配置中設定了固定的日期格式,是以我們需要将Json消息轉換器重新配置。

如果您清楚Java對于無參構造器的預設提供政策了解的話,相信您就能明白我們為什麼需要重新配置這些消息轉換器了。對于Jackson工具的封裝源碼如下:

至此,我們對于Spring的所有基本配置就都完成了,我們徹底抛棄了XML配置檔案,隻需要使用繼承就可以獲得這些配置并應用于我們的項目中。在下一篇博文中,我們将講解怎麼在我們項目中使用這些配置,并怎麼使用Java類代替web.xml檔案。

http://my.oschina.net/devleon/blog/530902