Java Spring Boot DI(依存性の注入)のサンプル

Spring BootのDI(依存性の注入)のサンプルです。
DIは、Dependency injectionの略です。

確認環境
・Windows10
・STS 3.9.6
・JDK 10.0.2
・Spring Boot 2.0.5

目次

環境

今回作成/修正するファイルは以下の赤枠の部分です。

 

サービスのファイル(Syain.java)

サービスのファイルです。

package com.example.demo;
import org.springframework.stereotype.Service;

@Service
public class Syain {
	public String getName() {
		return "suzuki";		
	}
}

4行目は、Serviceアノテーションです。
Serviceアノテーションは、一般的にビジネスロジックを書く時に使用します。

 

コントローラのファイル(MainController.java)

コントローラのファイルです。

package com.example.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MainController {
	
	@Autowired
	Syain syain;
	
	@RequestMapping("/test1")
	public String write1() {
		return syain.getName()	;
	}
}

9行目は、Autowiredアノテーションです。上記コードの@ServiceがあるSyainクラスをnewしてインスタンスを変数に設定します。これがDI(依存性の注入)です。
14行目は、SyainクラスのgetNameメソッドを実行しています。9,10行目の記述があるのでメソッドを実行して値を取得できます。

以下は、springのAutowiredアノテーションのリンクです。
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/annotation/Autowired.html

DIで使用する主なアノテーションとしては@Component、@Controller、@Repository他があります。

画面に表示する

以下のURLにアクセスすると画面にsuzukiと表示されます。

http://localhost:8080/test1

 

Bean定義ファイルを使用する方法

DIの方法として上記の他に、Bean定義ファイルを使用する方法があります。
※自分で作成したクラスは、通常このやり方ではなく上記のアノテーションを付ける方が使用されます。

サービスのファイル(Syain.java)

上記サービスのファイルを修正します。

package com.example.demo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Syain {
	@Bean
	public String getName() {
		return "tanaka";		
	}
}

5行目は、@Configurationを追加しました。
7行目は、@Beanを追加しました。

 

起動のファイル(Test1Application.java)

起動のファイルです。
11行目を追加しました。

package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

@SpringBootApplication
public class Test1Application {

	public static void main(String[] args) {
		ApplicationContext syain = new AnnotationConfigApplicationContext(Syain.class);
		SpringApplication.run(Test1Application.class, args);
	}
}

@Beanは、Spring起動時に設定の内容を取り込みます。

以下は、teratailのSpringフレームワーク@Beanと@componentの違いのリンクです。
https://teratail.com/questions/68235

以下は、springのConfigurationアノテーションのリンクです。
https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/context/annotation/Configuration.html

関連の記事

Java Spring Bootでhello worldを表示するサンプル
Java Spring Boot フォームの値を別画面に渡すサンプル
Java Spring Boot MySQLに接続してselectするサンプル(JPA)
Java Spring Boot AOPのサンプル
Java Spring Boot JSONの送信と受信のサンプル

△上に戻る