@Service
public class upService {
public void save(MultipartFile multipartFile) throws IOException {
multipartFile.getInputStream();
}
@SuppressWarnings("serial")
private static class StandardMultipartFile implements MultipartFile, Serializable {
private final Part part;
private final String filename;
public StandardMultipartFile(Part part, String filename) {
this.part = part;
this.filename = filename;
}
......这里省略实现类里的其他方法
@Override
public InputStream getInputStream() throws IOException {
return this.part.getInputStream();
}
我在upService里调用了MultipartFile 这个接口的getInputStream()方法,这里也没有指定实现类,打断点时就直接进到了StandardMultipartFile 这个静态实现类里的方法了,不知道这是如何做到的呢?
貌似是依赖注入实现的?但是没有看出来啊?查了查资料,貌似不是三种依赖注入的写法,MultipartFile的实现类有三个,怎么就调用这个了呢?很迷惑,每次看java的源码都是一堆问号
你应该看这个接口:
MultipartResolver
,处理文件上传的策略接口
。在
Spring
中,有两个实现:CommonsMultipartResolver
StandardServletMultipartResolver
看你标签标注了
springboot
,那就看MultipartAutoConfiguration
:这里默认使用的就是
StandardServletMultipartResolver
:这里直接使用
StandardMultipartHttpServletRequest
包装了原有的request
,继续:这里就出现了
StandardMultipartFile
。