1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Spring Boot起動時に、required a bean of typeが出た時の解消法

Posted at

#概要
Spring Bootを使ってWebアプリケーションを作ろうとした際に、以下のようなエラーが出ました。

Paramete 0 of constructor in hogeDao required a bean of type 'HogeConfigurationProPertiers' that could not befound.

このエラーの時に考えられる原因をQiitaやらで調べると、 必要な アノテーションが書かれていないことや、パッケージ構成がおかしいなどの記事を多く見つけれたのですが、自分の場合は解決しませんでした(実際にはアノテーションが関係していましたがorz)。設定周りのDIで調べると今回の解決策が出てきたので、エラー文とともに解決策を載せておきます。

原因

自分の場合、設定された値をアプリケーションで使うために、HogeConfigurationPropertiesで ConfigurationProperties アノテーションを付与して使っていました。
ConfigurationPropertiesアノテーションは設定ファイルと変数名をバインディングするために使われるものです。
ConfigurationPropertiesアノテーションをつけることでComponentスキャンされてBeanに登録しているのだろうと勝手に解釈していたのですが、それはSpringBoot2.2.1以前までの仕様で、v2.2.1からはこのConfigurationPropertiesアノテーションではスキャンをしてくれなくなったのが原因のようです。

解決策

ConfigurationPropertiesアノテーションをつけた設定クラスとは別に、以下のようなHugaConfigurationクラスを作成して、EnableConfigurationPropertiesアノテーションをつけます。
そうすることでBeanを登録することができ、解決できました。

@EnableConfigurationProperties({HogeConfigurationProperties.class})
public class HugaConfiguration {
// ...
}

まとめ

バージョンに依る違いを当たり前のように考えられるようにすると、強く誓いました。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?