Spring Bootで別パッケージのクラスをDIできないときの対処法をメモしておきます。
事象
上記のように、2つのパッケージ(com.example.common
とcom.example.api
)があり、パッケージ(com.example.api
)のクラス内で別パッケージ(com.example.common
)のクラスをDIしようとしたときにエラーが出ました。
原因
Spring Bootでは、デフォルトだと自身のパッケージ配下のクラスに対してコンポーネントスキャンするからです。
さきほどの例だと、com.example.api
内でSpring Bootアプリケーションを起動した場合、com.example.api
配下のクラスに対してコンポーネントスキャンすることになるので、com.example.common
内のクラスをDIできなかったのです。
対処法
コンポーネントスキャンするパッケージを変更してやればいいのです。具体的には、アプリケーションクラスで@SpringBootApplication
にscanBasePackages = {"コンポーネントスキャン対象のパッケージ"}
を指定してやればOKです。
今回の例だと、com.example.api
とcom.example.common
の親パッケージのcom.example
を指定してやることで、両方のパッケージをコンポーネントスキャンするようにしました。
まとめ
Spring Bootで別パッケージのクラスをDIできないときの対処法でした。