春季- 捕获豆子创建异常

2022-09-02 10:22:08

我想在我的代码中捕获Bean实例化异常。我有哪些选择?执行此操作的一种方法是使用基于 Java 的容器配置:

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

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


答案 1

方法应该捕获然后抛出BeanCreationException作为原因:someBeanSomeExceptionSomeException

@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);
    }
  }
}

答案 2

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

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

虽然我理解这个问题背后的本质。我认为最好在服务器加载期间失败。原因:应用程序不会处于不一致状态。假设你抓住了异常并做了一些清洁,但其他类会期望该豆存在,而它不存在。

因此,最好在初始化时失败,以便应用程序保持一致。虽然我不知道任何其他合法的做事方式。