构造函数的java参数0需要类型为“FileStorage PropertiesEdimages”的bean
关于这个问题,我已经讲了好几遍了,尽管我还是搞不懂
Parameter 0 of constructor in com.aed.demo.fileupload.FileStorageServiceAedImages required a bean of type 'com.aed.demo.fileupload.FileStoragePropertiesAedImages' that could not be found.
Action:
Consider defining a bean of type 'com.aed.demo.fileupload.FileStoragePropertiesAedImages' in your configuration.
我已经创建了一个FileStorageService
和一个FileStorageProperties
文件
文件存储属性
@ConfigurationProperties(prefix = "file")
public class FileStorageProperties {
private String uploadDir;
public String getUploadDir() {
return uploadDir;
}
public void setUploadDir(String uploadDir) {
this.uploadDir = uploadDir;
}
}
文件存储服务
@Service
public class FileStorageService {
private final Path fileStorageLocation;
@Autowired
public FileStorageService(FileStorageProperties fileStorageProperties) {
this.fileStorageLocation = Paths.get(fileStorageProperties.getUploadDir())
.toAbsolutePath().normalize();
try {
Files.createDirectories(this.fileStorageLocation);
} catch (Exception ex) {
throw new FileStorageException("Could not create the directory where the uploaded files will be stored.", ex);
}
}
...
}
上面的设置就像一个符咒,并创建它在application.properties
中定义的目录file.upload-dir=home/..
我试着用application.properties
中的另一个文件上传目录复制这两个配置
第二个FileStorage属性类
@ConfigurationProperties(prefix = "aed")
public class FileStoragePropertiesAedImages {
private String uploadDir;
public String getUploadDir() {
return uploadDir;
}
public void setUploadDir(String uploadDir) {
this.uploadDir = uploadDir;
}
}
第二个文件存储服务
@Service
public class FileStorageServiceAedImages {
private final Path fileStorageLocation;
@Autowired
public FileStorageServiceAedImages(FileStoragePropertiesAedImages fileStoragePropertiesAED) {
this.fileStorageLocation = Paths.get(fileStoragePropertiesAED.getUploadDir())
.toAbsolutePath().normalize();
try {
Files.createDirectories(this.fileStorageLocation);
} catch (Exception ex) {
throw new FileStorageException("Could not create the directory where the uploaded files will be stored.", ex);
}
}
...
}
然后抛出上面的错误。我需要创建3个我在application.properties
中定义的目录
file.upload-dir=home/..
mobile.upload-dir=mobile/..
aed.upload-dir=aed/..
前缀是正确的,为什么第二个存储服务不能初始化并且需要bean类型而第一个不需要呢
# 1 楼答案
您正在做的是
FileStorageServiceAedImages
处的构造函数自动连接,它需要类型为FileStoragePropertiesAedImages
的bean,但您尚未定义该类型的bean。您刚刚将@ ConfigurationProperties
添加到FileStorageProperties
。将@Configuration
添加到FileStorageProperties
将在FileStoragePropertiesAedImages
创建所需的bean将
@Configuation
注释添加到FileStoragePropertiesAedImages
类应该可以解决这个问题