有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

构造函数的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) 个答案

  1. # 1 楼答案

    您正在做的是FileStorageServiceAedImages处的构造函数自动连接,它需要类型为FileStoragePropertiesAedImages的bean,但您尚未定义该类型的bean。您刚刚将@ ConfigurationProperties添加到FileStorageProperties。将@Configuration添加到FileStorageProperties将在FileStoragePropertiesAedImages创建所需的bean

    @Configuation注释添加到FileStoragePropertiesAedImages类应该可以解决这个问题

    @ConfigurationProperties(prefix = "aed")
    @Configuation
    public class FileStoragePropertiesAedImages {