SpringBootのコンストラクタインジェクションのサンプルです。
(確認環境:Spring Boot 2.5,JDK 11)
目次
サンプル | コンストラクタインジェクション |
Lombokを使用したコンストラクタインジェクション | |
(参考) | フィールドインジェクション |
コンストラクタインジェクションが推奨されています。
コンストラクタインジェクション
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MainController {
private final SyainService syainService;
@Autowired
public MainController(SyainService syainService) {
this.syainService = syainService;
}
@GetMapping("/")
public String write1() {
return syainService.getName(); //suzuki
}
}
13行目は、MainControllerクラスのコンストラクタです。
13行目のsyainServiceのインスタンスは、DIでセットされ10行目の変数にセットされます。
finalのため再代入不可になります。
12行目の@Autowiredは、コンストラクタが1件のみかつSpring4.3以上であれば省略可能です。
Lombokを使用したコンストラクタインジェクション
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@RestController
public class MainController {
private final SyainService syainService;
@GetMapping("/")
public String write1() {
return syainService.getName(); // suzuki
}
}
8行目の@RequiredArgsConstructorは、Lombokのアノテーションです。
12行目のfinalのフィールドはコンストラクタインジェクションになります。
変数にDIからインスタンスがセットされます。
finalのため再代入不可になります。
フィールドインジェクション
package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MainController {
@Autowired
SyainService syainService;
@GetMapping("/")
public String write1() {
return syainService.getName(); //suzuki
}
}
10行目は、@Autowiredがあります。フィールドインジェクションになります。
関連の記事