目次
【Spring Boot】BeanCreationExceptionの対処法
要約
- エラーの概要: SpringがBeanを生成しようとする時点で、依存関係の不備やコンストラクタの例外発生などにより失敗する。
- 主な原因:
- 依存するBeanが存在しない (
NoSuchBeanDefinitionException
などを内包) - 初期化メソッド (
@PostConstruct
) 内で例外が発生
- 依存するBeanが存在しない (
- 修正方法のポイント:
- スタックトレースの最後を見て、どのBean生成が失敗しているか特定 → アノテーションや依存設定を見直す
エラー例
@Service
public class StartupService {
@Autowired
private NonExistentBean nonExistentBean;
@PostConstruct
public void init() {
nonExistentBean.run();
}
}
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'startupService' ...
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException:
No qualifying bean of type 'com.example.NonExistentBean' available
修正例
// 修正: 依存するBeanを実在するクラスに変更、またはBean定義を追加
@Service
public class StartupService {
@Autowired
private CorrectBean correctBean;
@PostConstruct
public void init() {
correctBean.run();
}
}
@Service
public class CorrectBean {
public void run() {
// ここでの処理
}
}
詳細
なぜそうなるのか?
- Springはアプリ起動時(もしくは必要に応じて)Beanを生成し、依存関係を注入していきます。その過程で、存在しないBeanを注入しようとしたり、コンストラクタや
@PostConstruct
で例外が発生したりすると生成に失敗し、BeanCreationException
が投げられます。
仕組みのポイント
BeanCreationException
は別の例外を内包していることが多く、スタックトレースのCaused by をよく見る必要があります。- 依存するBean(
NonExistentBean
など)の定義やアノテーションが正しいか、設定ファイルに定義があるかをチェックしましょう。