質問編集履歴

2

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

2018/08/08 11:30

投稿

yoshihiro_yy
yoshihiro_yy

スコア27

test CHANGED
File without changes
test CHANGED
@@ -113,3 +113,141 @@
113
113
 
114
114
 
115
115
  これが最善策なのでしょうか?
116
+
117
+
118
+
119
+ ---
120
+
121
+ ### 上記では駄目でした
122
+
123
+ 質問投稿後も、まさかと思い色々試していたのですが
124
+
125
+
126
+
127
+ ```Java
128
+
129
+ @Autowired(required=false)
130
+
131
+ private String processName;
132
+
133
+ ```
134
+
135
+ これはあくまでも型で一致するBeanを引っ張って来ているだけのようでした。
136
+
137
+ てっきり変数名と一致するIDのBeanをDIしているのかと思っていました。
138
+
139
+ なので
140
+
141
+
142
+
143
+ ```Java
144
+
145
+ @Autowired(required=false)
146
+
147
+ private String processNameaaaaa;
148
+
149
+ ```
150
+
151
+ といったふうに変えてもDIされていて、
152
+
153
+ 上記@Autowiredの記述の状態(変数名がprocessNameaaaaa)で
154
+
155
+
156
+
157
+ ```xml
158
+
159
+ <bean id="processName" class="java.lang.String">
160
+
161
+ <constructor-arg value="xxxx" />
162
+
163
+ </bean>
164
+
165
+ <bean id="testName" class="java.lang.String">
166
+
167
+ <constructor-arg value="aaaa" />
168
+
169
+ </bean>
170
+
171
+ ```
172
+
173
+ と、String型のbeanを複数定義したところ
174
+
175
+ > 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
176
+
177
+
178
+
179
+ と例外が発生してしまいました。
180
+
181
+
182
+
183
+ ### そこで改めて以下のようにしたところ希望通りの動きになりました
184
+
185
+
186
+
187
+ ```Java
188
+
189
+ @Autowired(required=false)
190
+
191
+ @Qualifier("processName")
192
+
193
+ private String processNameaaaaa;
194
+
195
+ ```
196
+
197
+ ```xml
198
+
199
+ <bean id="processName" class="java.lang.String">
200
+
201
+ <constructor-arg value="xxxx" />
202
+
203
+ </bean>
204
+
205
+ <bean id="testName" class="java.lang.String">
206
+
207
+ <constructor-arg value="aaaa" />
208
+
209
+ </bean>
210
+
211
+ ```
212
+
213
+ 上記だと問題なく「processNameaaaaa」には「xxxx」がDIされていました。
214
+
215
+ そうなってくると色々と理解ができないのですが
216
+
217
+ > @Autowired(required=false)
218
+
219
+
220
+
221
+ これを設定した時点で型によるDIは失敗しているのかと思えば、型によるDIをしていたようですし、
222
+
223
+ 併記する形で
224
+
225
+ > @Qualifier("processName")
226
+
227
+
228
+
229
+ を記述したらprocessNameというIDのbeanをDIさせていますし、意味が分かりません。。。
230
+
231
+ なぜ
232
+
233
+ > @Autowired
234
+
235
+ > private String processNameaaaaa;
236
+
237
+ >
238
+
239
+ > @Qualifier("processName")
240
+
241
+ > private String processNameaaaaa;
242
+
243
+ >
244
+
245
+ > @Autowired
246
+
247
+ > @Qualifier("processName")
248
+
249
+ > private String processNameaaaaa;
250
+
251
+
252
+
253
+ これらではDIさせられないのでしょうか・・・

1

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

2018/08/08 11:30

投稿

yoshihiro_yy
yoshihiro_yy

スコア27

test CHANGED
File without changes
test CHANGED
@@ -72,7 +72,7 @@
72
72
 
73
73
  > @Qualifier("")
74
74
 
75
- > @Resource("")
75
+ > @Resource
76
76
 
77
77
 
78
78
 
@@ -88,7 +88,13 @@
88
88
 
89
89
 
90
90
 
91
+ @Resource
92
+
93
+ private String processName;
94
+
95
+
96
+
91
- @Resource("processName")
97
+ @Resource(name="processName")
92
98
 
93
99
  private String processName;
94
100