Spring boot 自动配置 : MultipartAutoConfiguration

时间:2025-03-20 09:27:03
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; } }