Spring

Spring Bootで別パッケージのクラスをDIできないときの対処法

Spring Bootで別パッケージのクラスをDIできないときの対処法をメモしておきます。

事象

上記のように、2つのパッケージ(com.example.commoncom.example.api)があり、パッケージ(com.example.api)のクラス内で別パッケージ(com.example.common)のクラスをDIしようとしたときにエラーが出ました。

原因

Spring Bootでは、デフォルトだと自身のパッケージ配下のクラスに対してコンポーネントスキャンするからです。

さきほどの例だと、com.example.api内でSpring Bootアプリケーションを起動した場合、com.example.api配下のクラスに対してコンポーネントスキャンすることになるので、com.example.common内のクラスをDIできなかったのです。

対処法

コンポーネントスキャンするパッケージを変更してやればいいのです。具体的には、アプリケーションクラスで@SpringBootApplicationscanBasePackages = {"コンポーネントスキャン対象のパッケージ"}を指定してやればOKです。

今回の例だと、com.example.apicom.example.commonの親パッケージのcom.exampleを指定してやることで、両方のパッケージをコンポーネントスキャンするようにしました。

まとめ

Spring Bootで別パッケージのクラスをDIできないときの対処法でした。

-Spring

© 2024 Reasonable Code