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できないときの対処法でした。