SpringBoot DI(依存性の注入)のサンプル

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

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

目次

サンプル 環境
  DIでインスタンスを取得する
  アプリ起動時にインスタンスを取得する

環境

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

DIでインスタンスを取得する

DIでインスタンスを取得するサンプルです。

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

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

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

4行目の@Serviceは、アノテーションです。DIコンテナに登録します。
Serviceアノテーションは、ビジネスロジックのクラスに使用します。
5行目は、Syainクラスです。
6行目のメソッドを実行すると文字列を返します。

 

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

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
	Syain syain;
	
	@GetMapping("/test1")
	public String write1() {
		return syain.getName();
	}
}

9行目は、Autowiredアノテーションです。
上記コードの@ServiceがあるSyainクラスをnewしてインスタンスを変数syainに設定します。
これが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コンテナに登録するアノテーションでよく使用されるものです。

アノテーション 説明
@Service サービスクラスにつけます
@Component DIコンテナに登録する場合につけます
@Controller コントローラークラスにつけます
@Repository DAO(DB)のクラスにつけます

画面に表示する

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

http://localhost:8080/test1

 

アプリ起動時にインスタンスを取得する

アプリ起動時にインスタンスを取得するサンプルです。

サービスのファイル(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を追加しました。@Beanは、Spring起動時に設定の内容を取り込みます。

 

起動のファイル(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);
	}
}

以下は、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

関連の記事

SpringBootでhello worldを表示するサンプル
SpringBoot フォームの値を別画面に渡す
SpringBoot JPAでMySQLにselectするサンプル
SpringBoot AOPのサンプル
SpringBoot JSONの送信と受信のサンプル

△上に戻る