概述
自动配置类MultipartAutoConfiguration针对Spring Servlet Web应用环境,对文件上传进行相关配置。在配置参数spring.servlet.multipart.enaled没有设置,或者设置为true时,该自动配置类确保bean MultipartConfigElement multipartConfigElement或者bean StandardServletMultipartResolver multipartResolver的存在。也就是在这些bean没有被定义的情况下定义这些bean。
源代码
源代码版本 : spring-boot-autoconfigure-2.1.3.RELEASE
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
* javax.servlet.MultipartConfigElement multipartConfigElement if none is
* otherwise defined. The ServletWebServerApplicationContext will associate the
* MultipartConfigElement bean to any Servlet beans.
*
* The javax.servlet.MultipartConfigElement is a Servlet API that's used to
* configure how the server handles file uploads.
*/
@Configuration
// 仅在指定类存在于 classpath 时才生效
@ConditionalOnClass({ Servlet.class, StandardServletMultipartResolver.class,
MultipartConfigElement.class })
// 在配置参数 spring.servlet.multipart.enabled 没有被明确指定为 false 时生效
@ConditionalOnProperty(prefix = "spring.servlet.multipart", name = "enabled", matchIfMissing = true)
// 仅在当前应用是 Spring Servlet Web 应用时才生效
@ConditionalOnWebApplication(type = Type.SERVLET)
// 确保以为 spring.servlet.multipart 前缀的参数加载到 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;
}
}

本文介绍Spring Boot中MultipartAutoConfiguration的功能与实现细节。该配置类确保了文件上传相关组件如StandardServletMultipartResolver和MultipartConfigElement的存在,用于处理Servlet Web应用中的多部分文件上传。
62

被折叠的 条评论
为什么被折叠?



