Spring-Boot: Попытка вызвать пользовательское исключение RunTimeException из метода @PostConstruct завершается неудачно - PullRequest
0 голосов
/ 19 марта 2020

В основном, код, который я имею, здесь ниже. Учтите, что это «тестовое» состояние кода. Первоначальной проблемой c был вызов init () к другому классу, который вызывал проверенное исключение. Этот бросок был перехвачен блоком try / catch, после чего произошла ошибка приложения при попытке создать исключение. Все это было удалено для ясности, так как проблема была в создании «MyCustomRuntimeException».

@Component
public class ClassName {

  public ClassName() {
    //minor, non problematic operations.
  }

  @PostConstruct
  public void init() {
    throw new MyCustomRuntimeException("AAAAAAAH");
  }

}

MyCustomRuntimeException определено так:

public class MyCustomRuntimeException extends RuntimeException {

  public MyCustomRuntimeException (String message) {
    super(message);
  }
}

И я получаю UnsatisfiedDependencyException при создании класса, который использует этот класс. Консоль указывает на линию, где генерируется новое исключение MyCustomRuntimeException, и я не понимаю, что происходит.

Кроме того, «MyCustomRuntimeException» запускалось как обычное исключение, но я видел, что I вместо этого следует генерировать исключение RunTimeException, поскольку @PostConstruct запрещает выбрасывать проверенные исключения . И я также попытался бросить стандартное исключение RunTimeException без удачи.

Итак, я здесь ничего не понимаю. Есть идеи, почему я не могу выбросить это исключение?

1 Ответ

1 голос
/ 19 марта 2020

Каждый бин в контексте должен быть правильно создан. При возникновении ошибки создание bean-компонентов останавливается / завершается неудачей, и контекст (или, другими словами, ваше приложение) не запускается.

Вы получаете UnsatisfiedDependencyException из-за того, что бин ClassName создан, потому что он нужен другому бину. После построения ClassName он будет вызывать @PostConstruct компонента ClassName, и это происходит из-за исключения. Следовательно, экземпляр не создается, поэтому UnsatisfiedDependencyException.

Причиной root для UnsatisfiedDependencyException будет исключение, выданное вашим собственным методом инициализатора.

...