Spring Boot 5 AutowiredとDI
Dependency Injection(DI)の話です。
SpringBootではAutowiredとアノテーションを記述することで自動でDIを行えます。
ですが、まずDIって何?利点は何なのか?ということを説明していきたいと思います。
まず、前回のソースです。
ここではSampleServiceの前に@Autowiredを記述しています。
しかし、SampleServiceクラスを使うと記載して、SampleServiceクラスがそのまま注入されるのであれば、何も嬉しくありません。
newして入れるのと大差が無いです。
そこで、SampleServiceを以下のように変更します
SampleServiceクラスをインターフェイスに変更しています。
このままでは動作しないので、インターフェイスを実装したクラスを作成します。
SampleServiceインターフェイスを実装したSampleServiceMockクラスを作成しました。
この時のSampleServiceを呼び出しているクラスの@Autowiredと宣言はそのままです。
これを実行すると、以下のようになります。
@Autowiredで指定したクラスがインターフェイスの場合、それを実装しているクラスを自動で注入してくれます。
今回はMockとしていますが、後々にImpleという名前のクラスで処理を本実装した場合でも、SampleServiceを呼び出しているクラスには影響がありません。
これがSpringBootのDIです。
後は、DIらしくPGはモックで、PT時はテスト用のモックで、IT時は本実装されたクラスで、とすれば、開発がやりやすくなるはずです。
なお、インターフェイスを実装したクラスが複数ある場合、起動時にRuntimeExceptionが発生するので注意しましょう。