teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

上手くいくケースを見つけたので追記

2018/08/08 11:30

投稿

yoshihiro_yy
yoshihiro_yy

スコア27

title CHANGED
File without changes
body CHANGED
@@ -55,4 +55,73 @@
55
55
  私の希望するDIとしては、
56
56
  > @Autowired(required=false)
57
57
 
58
- これが最善策なのでしょうか?
58
+ これが最善策なのでしょうか?
59
+
60
+ ---
61
+ ### 上記では駄目でした
62
+ 質問投稿後も、まさかと思い色々試していたのですが
63
+
64
+ ```Java
65
+ @Autowired(required=false)
66
+ private String processName;
67
+ ```
68
+ これはあくまでも型で一致するBeanを引っ張って来ているだけのようでした。
69
+ てっきり変数名と一致するIDのBeanをDIしているのかと思っていました。
70
+ なので
71
+
72
+ ```Java
73
+ @Autowired(required=false)
74
+ private String processNameaaaaa;
75
+ ```
76
+ といったふうに変えてもDIされていて、
77
+ 上記@Autowiredの記述の状態(変数名がprocessNameaaaaa)で
78
+
79
+ ```xml
80
+ <bean id="processName" class="java.lang.String">
81
+ <constructor-arg value="xxxx" />
82
+ </bean>
83
+ <bean id="testName" class="java.lang.String">
84
+ <constructor-arg value="aaaa" />
85
+ </bean>
86
+ ```
87
+ と、String型のbeanを複数定義したところ
88
+ > Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'java.lang.String' available: expected single matching bean but found 2: processName,testName
89
+
90
+ と例外が発生してしまいました。
91
+
92
+ ### そこで改めて以下のようにしたところ希望通りの動きになりました
93
+
94
+ ```Java
95
+ @Autowired(required=false)
96
+ @Qualifier("processName")
97
+ private String processNameaaaaa;
98
+ ```
99
+ ```xml
100
+ <bean id="processName" class="java.lang.String">
101
+ <constructor-arg value="xxxx" />
102
+ </bean>
103
+ <bean id="testName" class="java.lang.String">
104
+ <constructor-arg value="aaaa" />
105
+ </bean>
106
+ ```
107
+ 上記だと問題なく「processNameaaaaa」には「xxxx」がDIされていました。
108
+ そうなってくると色々と理解ができないのですが
109
+ > @Autowired(required=false)
110
+
111
+ これを設定した時点で型によるDIは失敗しているのかと思えば、型によるDIをしていたようですし、
112
+ 併記する形で
113
+ > @Qualifier("processName")
114
+
115
+ を記述したらprocessNameというIDのbeanをDIさせていますし、意味が分かりません。。。
116
+ なぜ
117
+ > @Autowired
118
+ > private String processNameaaaaa;
119
+ >
120
+ > @Qualifier("processName")
121
+ > private String processNameaaaaa;
122
+ >
123
+ > @Autowired
124
+ > @Qualifier("processName")
125
+ > private String processNameaaaaa;
126
+
127
+ これらではDIさせられないのでしょうか・・・

1

試したアノテーションの詳細を修正

2018/08/08 11:30

投稿

yoshihiro_yy
yoshihiro_yy

スコア27

title CHANGED
File without changes
body CHANGED
@@ -35,7 +35,7 @@
35
35
 
36
36
  もしそうなのであれば、
37
37
  > @Qualifier("")
38
- > @Resource("")
38
+ > @Resource
39
39
 
40
40
  でもDIさせられるかと思い
41
41
 
@@ -43,8 +43,11 @@
43
43
  @Qualifier("processName")
44
44
  private String processName;
45
45
 
46
- @Resource("processName")
46
+ @Resource
47
47
  private String processName;
48
+
49
+ @Resource(name="processName")
50
+ private String processName;
48
51
  ```
49
52
  こう試しましたが、これらも例外が発生し上手くDIさせられませんでした。
50
53
  (xmlでbeanにQualifierで命名する方法が検索したのですがよく分からず・・・)