Spring-引导:尝试从 @PostConstruct 方法抛出自定义 RunTimeException 失败

Spring-Boot: Trying to throw a custom RunTimeException from @PostConstruct method fails

基本上,我的代码在下面。考虑到这是代码的 "test" 状态。最初的问题是调用 init() 到一个不同的 class 抛出一个已检查的异常。此抛出被 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);
  }
}

而且,在创建使用此 class 的 class 时,我得到了一个 "UnsatisfiedDependencyException"。控制台指向抛出新的 MyCustomRuntimeException 的行,但我真的不明白发生了什么。

此外,"MyCustomRuntimeException" 开始时是一个常规异常,但我看到 I should throw a RunTimeException instead because the @PostConstruct forbids checked exceptions to be thrown。而且我还尝试抛出一个标准的 RunTimeException,但没有成功。

所以,我在这里一无所知。关于为什么我不能抛出这个异常有什么想法吗?

需要正确创建上下文中的每个 bean。当发生错误时,bean 的创建将 stop/fail 并且上下文(或者换句话说,您的应用程序)将不会启动。

你得到一个 UnsatisfiedDependencyException 是因为 ClassName bean 是因为另一个 bean 需要它而创建的。在构造 ClassName 之后,它将调用 ClassName bean 的 @PostConstruct,但由于异常而失败。因此实例不会被创建,因此 UnsatisfiedDependencyException.

UnsatisfiedDependencyException 的根本原因是您自己的初始化方法抛出的异常。