Не удалось создать экземпляр объекта с помощью фабричного метода - PullRequest
0 голосов
/ 28 января 2020

Я получаю сообщение об ошибке ниже:

org.springframework.beans.factory.BeanCreationException: Ошибка создания компонента с именем fileStorageServiceBean, определенным в com.primesolutions.fileupload.settings.FileStorageProperties: создание экземпляра компонента через фабричный метод не удалось; вложенным исключением является org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр [com.primesolutions.fileupload.service.FileStorageService]: метод фабрики 'fileStorageServiceBean' вызвал исключение; вложенное исключение: java .lang.StackOverflowError

@ConfigurationProperties(prefix = "file")
public class FileStorageProperties {

    private String uploadDir;

    @Bean
    public FileStorageService fileStorageServiceBean() throws Exception{
        return new FileOnDiskStorageService();  // some random name; don't exist
    }

    public String getUploadDir() {
        return uploadDir;
    }

    public void setUploadDir(String uploadDir) {
        this.uploadDir = uploadDir;
    }
}

Ответы [ 2 ]

1 голос
/ 28 января 2020

Ваш метод:

public FileStorageService fileStorageServiceBean() throws Exception{
    return fileStorageServiceBean();
}

Является рекурсивной функцией. Что вызывает стекOverflowError.

0 голосов
/ 28 января 2020

Вы получаете java.lang.StackOverflowError, потому что метод fileStorageServiceBean () вызывает сам себя, и это приведет к бесконечному l oop. Эта часть кода никогда не может закончиться в этой ситуации.

Это может / должно быть что-то вроде:

@Bean
public FileStorageService fileStorageServiceBean() throws Exception{
    return new FileOnDiskStorageService();  // some random name; don't exist
}

Если вы используете хорошую IDE, она предупредит вас об этом. Это хороший совет, всегда используйте хорошую IDE для Java и читайте предупреждения. Кроме того, устанавливая плагины, такие как SonarQube, Findbugs действительно помогает предотвратить проблемы с кодом.

Кроме того, трассировка стека ошибок даст номер строки и некоторую информацию о том, где в коде произошла ошибка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...