天天看点

基于纯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