# 7.1.1　自定义 DispatcherServlet 配置

虽然从程序清单 7.1 的外观上不一定能够看得出来，但是 AbstractAnnotation-ConfigDispatcherServletInitializer 所完成的事情其实比看上去要多。在 SpittrWeb-AppInitializer 中我们所编写的三个方法仅仅是必须要重载的 abstract 方法。但实际上还有更多的方法可以进行重载，从而实现额外的配置。

此类的方法之一就是 customizeRegistration()。在 AbstractAnnotationConfig-DispatcherServletInitializer 将 DispatcherServlet 注册到 Servlet 容器中之后，就会调用 customizeRegistration()，并将 Servlet 注册后得到的 Registration.Dynamic 传递进来。通过重载 customizeRegistration() 方法，我们可以对 Dispatcher-Servlet 进行额外的配置。

例如，在本章稍后的内容中（7.2 节），我们将会看到如何在 Spring MVC 中处理 multipart 请求和文件上传。如果计划使用 Servlet 3.0 对 multipart 配置的支持，那么需要使用 DispatcherServlet 的 registration 来启用 multipart 请求。我们可以重 载 customizeRegistration() 方法来设置 MultipartConfigElement，如下所示：

```java
@Override
protected void customizeRegistration(Dynamic registration) {
  registration.setMultipartConfig(
    new MultipartConfigElement("/tmp/spittr/uploads");
  );
}
```

借助 customizeRegistration() 方法中的 ServletRegistration.Dynamic，我们能够完成多项任务，包括通过调用 setLoadOnStartup() 设置 load-on-startup 优先级，通过 setInitParameter() 设置初始化参数，通过调用 setMultipartConfig() 配置 Servlet 3.0 对 multipart 的支持。在前面的样例中，我们设置了对 multipart 的支持，将上传文件的临时存储目录设置在 `/tmp/spittr/uploads` 中。
