Spring - 捕获bean创建异常

kha*_*hik 14 java configuration spring exception

我想在我的代码中捕获bean实例化异常.我有什么选择?一种方法是使用基于Java的容器配置:

@Configuration
public class AppConfig {
  @Bean
  public SomeBean someBean() {
    try {
      return new SomeBean(); // throws SomeException
    } catch(SomeException se) {
      return new SomeBeanStub();
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

是否可以使用基于XML或基于注释的配置使用Spring为bean实例化定义异常处理程序?

Der*_*har 11

方法someBean应该抓住SomeException然后扔BeanCreationExceptionSomeException的原因:

@Configuration
public class AppConfig {
  @Bean
  public SomeBean someBean() {
    try {
      return new SomeBean(); // throws SomeException
    } catch (SomeException se) {
      throw new BeanCreationException("someBean", "Failed to create a SomeBean", se);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)


Jat*_*tin 3

你不应该这样做。这就是让 Spring 为您创建 bean 的全部意义所在。如果您要使用new(如上)创建自己的 bean,为什么要使用 Spring 为您创建 bean?

您确实可以为自己分配对象并一起工作,而不是依赖注入等等。

尽管我了解问题背后的本质。我认为最好是在服务器加载期间失败。原因:应用程序不会处于不一致的状态。假设您捕获了异常并进行了一些清理,但其他类会期望该 bean 存在,但事实并非如此。

因此,最好它在初始化时失败,以便应用程序保持一致。尽管我不知道还有其他合法的做法。