okinawa

IT勉強メモ

Spring Boot基礎&リンク集

基礎記事を書こうと思ったけど、すでに素晴らしい記事があったのでリンク集にする。

※リンクを上から見ていけばわかるようにすること。

Spring Boot全体の参考サイト

stechup.co.jp

stechup.co.jp

stechup.co.jp

stechup.co.jp

さらに踏み込んだ内容↓
www.youtube.com

Dependency Injection(依存性の注入)の参考サイト

www.youtube.com

tech-blog.yayoi-kk.co.jp

qiita.com

アノテーション

annotationは注釈という意味。

  • @Controller
  • @Service
  • @Repository

これらのよく見るアノテーション

Bean化して、DIコンテナに入れるためのアノテーション

実は@Componetで代用可能。

役割を明示するために@Serviceなどしているが、全部@Componetにしても機能はする?→一度試してみたい。

DIコンテナから呼び出すには?

@Autowiredで呼び出すだけ。

@Repository //Bean化してDIコンテナに格納
public interface SampleRepository {  }

@Service //Bean化してDIコンテナに格納
public class SampleService {  

  @Autowired //DIコンテナから呼び出し
  SampleRepository sampleRepository;
}

@RepositoryでBeanとしてDIコンテナに格納 → @Autowiredが付与されたクラスにインスタンスが注入される

Beanとは

Javaで言うところのBeanとは再利用可能なデータのこと。

getter stterメソッドが用意されているクラス。

Dependency Injection(依存性の注入)とは

■DIの概要
DIコンテナ=Beanをインスタンス化したものの入れ物

@ComponentなどでDIコンテナにBeanを格納する

DIコンテナからBeanインスタンス@Autowiredで取り出す

■DIのメリット

  1. DIではインスタンスがシングルトンで1個しか作られないので、メモリ節約できる。
  2. 疎結合なためテストがしやすい。

DIしない場合とDIする場合で見比べてみる↓

・DIしないコード例

public class CarController {
 
  public Car car() {
    Device device = new Device();
    device.engineOn();
  }
}

上記のコードだと、carメソッドが呼ばれる度にDeviceクラスのインスタンスが作られる。1万回リクエスト来たら1万個のインスタンスになる。

CarControllerクラスをテストするときに、Deviceクラスが未完成だとテストできない。

・DIするコード例

public class CarController {
  @Autowired
  DeviceService devideService;
 
  public boolean car() {
    boolean isEngineOn = devideService.engineOn();
    return isEngineOn;
  }
}

@Service
public class DeviceImpl implements DeviceService {
  
  public boolean ebginOn() {
    if (xxx) {
      return true;
    else {
      return false;
  }
}

DIするとDeviceServiceインタンスは1個しか作られないため、メモリ節約できる。

また、テストのときにDeviceImpl クラスが未完成だったとしても、Mockクラスを作ればテスト可能。