質問編集履歴

5

質問を修正

2019/06/12 06:38

投稿

退会済みユーザー
test CHANGED
@@ -1 +1 @@
1
- @AutowiredでDIされるインスタンスは、それ処理中の場合DI利用す処理は待ちになります
1
+ 【Spring】@AutowiredでDIされるインスタンスが複数リクエストに対応する際インスタンスはシングルトン維持できているのでしょう
test CHANGED
@@ -1,8 +1,10 @@
1
- ### 前提・実現したいこと
1
+ ### 質問詳細
2
2
 
3
3
 
4
4
 
5
- Spring Bootの @Autowired でDIされるインスタンスはシングルトンであるとの認識ですが、それが時間がかかる処理を行っているとき、DIでそのインスタンスを利用すスレッド等は待ち状態になるのでしょうか。
5
+ Spring Bootの @Autowired でDIされるインスタンスはシングルトンであるとの認識ですが、それが時間がかかる処理を行っているとき、インスタンスはシングルトン維持できているのでしょうか。
6
+
7
+ またそうでない場合は実際にメモリ上でインスタンスはどのような挙動になっているのでしょうか。
6
8
 
7
9
 
8
10
 

4

試したこと、疑問点追記

2019/06/12 06:38

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -59,3 +59,19 @@
59
59
  }
60
60
 
61
61
  ```
62
+
63
+
64
+
65
+ ### 試したこと
66
+
67
+
68
+
69
+ DIしたserviceのメソッドでThread.sleep(10000)を行っている最中に新規リクエストを実行したところ、
70
+
71
+ 新規リクエストにおいても遅延なくDIしたserviceのメソッドが呼び出された。
72
+
73
+
74
+
75
+ #### 疑問点
76
+
77
+ シングルトンのインスタンスが処理中なのに、なぜ新規リクエストの同インスタンスを用いた処理が待ちにならないのか分からない。

3

タグ追記

2019/06/12 06:15

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
File without changes

2

アノテーション追記

2019/06/12 05:41

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -13,6 +13,8 @@
13
13
 
14
14
 
15
15
  ```Java
16
+
17
+ @RestController
16
18
 
17
19
  @RequestMapping("api")
18
20
 

1

コードを追記

2019/06/12 05:39

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -3,3 +3,57 @@
3
3
 
4
4
 
5
5
  Spring Bootの @Autowired でDIされるインスタンスはシングルトンであるとの認識ですが、それが時間がかかる処理を行っているとき、DIでそのインスタンスを利用する他のスレッド等は待ち状態になるのでしょうか。
6
+
7
+
8
+
9
+ ### コード例
10
+
11
+
12
+
13
+
14
+
15
+ ```Java
16
+
17
+ @RequestMapping("api")
18
+
19
+ public class TestController {
20
+
21
+
22
+
23
+ @Autowired
24
+
25
+ TestService testService;
26
+
27
+
28
+
29
+ @RequestMapping(value = "", method = RequestMethod.GET)
30
+
31
+ public Map<String, Object> test() {
32
+
33
+
34
+
35
+ val resultMap = new HashMap<String, Object>();
36
+
37
+
38
+
39
+ // 下記処理を実行するのに時間がかかる
40
+
41
+ // 処理が終わらないうちに次のリクエストがとんでくる想定
42
+
43
+ val result = testService.omoi();
44
+
45
+
46
+
47
+ resultMap.put("result",result);
48
+
49
+ return resultMap;
50
+
51
+
52
+
53
+ }
54
+
55
+
56
+
57
+ }
58
+
59
+ ```