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の送信と受信のサンプル