Spring boot 自动配置 : MultipartAutoConfiguration

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

自动配置类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;
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值