SpringBoot コンストラクタインジェクション

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があります。フィールドインジェクションになります。

関連の記事

SpringBoot フォームの値を別画面に渡す

△上に戻る