自动配置类
在SpringBoot中,文件上传是有自动配置类的,就先看自动配置类
//声明自己是一个配置类,并设置proxyBeanMethods代理组件方法为单例模式
@Configuration(proxyBeanMethods = false)
//在有里面这些类的前提下加载这个组件
@ConditionalOnClass({ Servlet.class, StandardServletMultipartResolver.class, MultipartConfigElement.class })
//有没有前缀是spring.servlet.multipart,值为enabled的配置项,matchIfMissing的值为true,就是说默认有这个
@ConditionalOnProperty(prefix = "spring.servlet.multipart", name = "enabled", matchIfMissing = true)
//当前项目要是一个Servlet项目,说明Multipart就支持Servlet类型的文件上传,其他类型的文件上传就要自己定制化编写文件上传配置
@ConditionalOnWebApplication(type = Type.SERVLET)
//配置绑定,并且注册为容器中的一个组件,跟里面那个类配置绑定的要求一样
@EnableConfigurationProperties(MultipartProperties.class)
public class MultipartAutoConfiguration {
//MultipartProperties默认的配置信息,在这里面有很多默认配置,后面需要修改就能通过他配置绑定的指定前缀修改配置
private final MultipartProperties multipartProperties;
//有参构造,你也能自定义一个配置信息类,通过有参构造代替它默认的
public MultipartAutoConfiguration(MultipartProperties multipartProperties) {
this.multipartProperties = multipartProperties;
}
/*
添加一个组件,当容器中没有MultipartConfigElement.class, CommonsMultipartResolver.class
这两个类型的组件时,组件名字叫multipartConfigElement
*/
@Bean
@ConditionalOnMissingBean({ MultipartConfigElement.class, CommonsMultipartResolver.class })
public MultipartConfigElement multipartConfigElement() {
return this.multipartProperties.createMultipartConfig();
}
/*
添加一个组件,如果容器中没有MultipartResolver类型的组件,就是说用户如果没自己设置MultipartResolver,就由容器替你自动添加,名字是multipartResolver,是StandardServletMultipartResolver类型的
*/
@Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
@ConditionalOnMissingBean(MultipartResolver.class)
public StandardServletMultipartResolver multipartResolver() {
StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver();
multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily());
return multipartResolver;
}
}
DispathcerServlet中
经过这么久的学习,已经知道请求处理是在DispatcherServlet类的doDispatch方法中执行的,所以直接在doDispatch方法中打断点发请求,观察如何处理请求携带的参数。
来到doDispatch方法中&