Spring boot 自动配置 : MultipartAutoConfiguration
package org.springframework.boot.autoconfigure.web.servlet;
// 忽略 import 行
/**
* EnableAutoConfiguration Auto-configuration for multi-part uploads. Adds a
* StandardServletMultipartResolver if none is present, and adds a
* multipartConfigElement if none is
* otherwise defined. The ServletWebServerApplicationContext will associate the
* MultipartConfigElement bean to any Servlet beans.
*
* The is a Servlet API that's used to
* configure how the server handles file uploads.
*/
@Configuration
// 仅在指定类存在于 classpath 时才生效
@ConditionalOnClass({ Servlet.class, StandardServletMultipartResolver.class,
MultipartConfigElement.class })
// 在配置参数 没有被明确指定为 false 时生效
@ConditionalOnProperty(prefix = "", name = "enabled", matchIfMissing = true)
// 仅在当前应用是 Spring Servlet Web 应用时才生效
@ConditionalOnWebApplication(type = Type.SERVLET)
// 确保以为 前缀的参数加载到 bean MultipartProperties
@EnableConfigurationProperties(MultipartProperties.class)
public class MultipartAutoConfiguration {
private final MultipartProperties multipartProperties;
public MultipartAutoConfiguration(MultipartProperties multipartProperties) {
this.multipartProperties = multipartProperties;
}
// 定义 bean MultipartConfigElement
@Bean
// 仅在指定类型的 bean 不存在时才生效
@ConditionalOnMissingBean({ MultipartConfigElement.class,CommonsMultipartResolver.class })
public MultipartConfigElement multipartConfigElement() {
return this.multipartProperties.createMultipartConfig();
}
// 定义 bean StandardServletMultipartResolver, 名称为 multipartResolver
@Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
// 仅在该类型的 bean 不存在时才生效
@ConditionalOnMissingBean(MultipartResolver.class)
public StandardServletMultipartResolver multipartResolver() {
StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver();
multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily());
return multipartResolver;
}
}