@@ -237,33 +237,28 @@ AutowiredArguments resolveArguments(RegisteredBean registeredBean) {
237
237
238
238
private AutowiredArguments resolveArguments (RegisteredBean registeredBean , Executable executable ) {
239
239
Assert .isInstanceOf (AbstractAutowireCapableBeanFactory .class , registeredBean .getBeanFactory ());
240
- String beanName = registeredBean .getBeanName ();
241
- Class <?> beanClass = registeredBean .getBeanClass ();
242
- AbstractAutowireCapableBeanFactory beanFactory =
243
- (AbstractAutowireCapableBeanFactory ) registeredBean .getBeanFactory ();
244
- RootBeanDefinition mergedBeanDefinition = registeredBean .getMergedBeanDefinition ();
240
+
245
241
int startIndex = (executable instanceof Constructor <?> constructor &&
246
242
ClassUtils .isInnerClass (constructor .getDeclaringClass ())) ? 1 : 0 ;
247
243
int parameterCount = executable .getParameterCount ();
248
244
Object [] resolved = new Object [parameterCount - startIndex ];
249
245
Assert .isTrue (this .shortcuts == null || this .shortcuts .length == resolved .length ,
250
246
() -> "'shortcuts' must contain " + resolved .length + " elements" );
247
+
248
+ ConstructorArgumentValues argumentValues = resolveArgumentValues (registeredBean );
251
249
Set <String > autowiredBeans = new LinkedHashSet <>(resolved .length );
252
- ConstructorArgumentValues argumentValues = resolveArgumentValues (beanFactory ,
253
- beanName , mergedBeanDefinition );
254
250
for (int i = startIndex ; i < parameterCount ; i ++) {
255
251
MethodParameter parameter = getMethodParameter (executable , i );
256
- DependencyDescriptor dependencyDescriptor = new DependencyDescriptor (parameter , true );
257
- String shortcut = (this .shortcuts != null ) ? this .shortcuts [i - startIndex ] : null ;
252
+ DependencyDescriptor descriptor = new DependencyDescriptor (parameter , true );
253
+ String shortcut = (this .shortcuts != null ? this .shortcuts [i - startIndex ] : null ) ;
258
254
if (shortcut != null ) {
259
- dependencyDescriptor = new ShortcutDependencyDescriptor (
260
- dependencyDescriptor , shortcut , beanClass );
255
+ descriptor = new ShortcutDependencyDescriptor (descriptor , shortcut , registeredBean .getBeanClass ());
261
256
}
262
257
ValueHolder argumentValue = argumentValues .getIndexedArgumentValue (i , null );
263
- resolved [i - startIndex ] = resolveArgument (registeredBean ,autowiredBeans ,
264
- dependencyDescriptor , argumentValue );
258
+ resolved [i - startIndex ] = resolveArgument (registeredBean , descriptor , argumentValue , autowiredBeans );
265
259
}
266
- registerDependentBeans (beanFactory , beanName , autowiredBeans );
260
+ registerDependentBeans (registeredBean .getBeanFactory (), registeredBean .getBeanName (), autowiredBeans );
261
+
267
262
return AutowiredArguments .of (resolved );
268
263
}
269
264
@@ -277,15 +272,14 @@ private MethodParameter getMethodParameter(Executable executable, int index) {
277
272
throw new IllegalStateException ("Unsupported executable: " + executable .getClass ().getName ());
278
273
}
279
274
280
- private ConstructorArgumentValues resolveArgumentValues (
281
- AbstractAutowireCapableBeanFactory beanFactory , String beanName ,
282
- RootBeanDefinition mergedBeanDefinition ) {
283
-
275
+ private ConstructorArgumentValues resolveArgumentValues (RegisteredBean registeredBean ) {
284
276
ConstructorArgumentValues resolved = new ConstructorArgumentValues ();
285
- if (mergedBeanDefinition .hasConstructorArgumentValues ()) {
277
+ RootBeanDefinition beanDefinition = registeredBean .getMergedBeanDefinition ();
278
+ if (beanDefinition .hasConstructorArgumentValues () &&
279
+ registeredBean .getBeanFactory () instanceof AbstractAutowireCapableBeanFactory beanFactory ) {
286
280
BeanDefinitionValueResolver valueResolver = new BeanDefinitionValueResolver (
287
- beanFactory , beanName , mergedBeanDefinition , beanFactory .getTypeConverter ());
288
- ConstructorArgumentValues values = mergedBeanDefinition .getConstructorArgumentValues ();
281
+ beanFactory , registeredBean . getBeanName (), beanDefinition , beanFactory .getTypeConverter ());
282
+ ConstructorArgumentValues values = beanDefinition .getConstructorArgumentValues ();
289
283
values .getIndexedArgumentValues ().forEach ((index , valueHolder ) -> {
290
284
ValueHolder resolvedValue = resolveArgumentValue (valueResolver , valueHolder );
291
285
resolved .addIndexedArgumentValue (index , resolvedValue );
@@ -298,30 +292,27 @@ private ValueHolder resolveArgumentValue(BeanDefinitionValueResolver resolver, V
298
292
if (valueHolder .isConverted ()) {
299
293
return valueHolder ;
300
294
}
301
- Object resolvedValue = resolver .resolveValueIfNecessary ("constructor argument" ,
302
- valueHolder .getValue ());
303
- ValueHolder resolvedValueHolder = new ValueHolder (resolvedValue ,
304
- valueHolder .getType (), valueHolder .getName ());
305
- resolvedValueHolder .setSource (valueHolder );
306
- return resolvedValueHolder ;
295
+ Object value = resolver .resolveValueIfNecessary ("constructor argument" , valueHolder .getValue ());
296
+ ValueHolder resolvedHolder = new ValueHolder (value , valueHolder .getType (), valueHolder .getName ());
297
+ resolvedHolder .setSource (valueHolder );
298
+ return resolvedHolder ;
307
299
}
308
300
309
301
@ Nullable
310
- private Object resolveArgument (RegisteredBean registeredBean , Set < String > autowiredBeans ,
311
- DependencyDescriptor dependencyDescriptor , @ Nullable ValueHolder argumentValue ) {
302
+ private Object resolveArgument (RegisteredBean registeredBean , DependencyDescriptor descriptor ,
303
+ @ Nullable ValueHolder argumentValue , Set < String > autowiredBeans ) {
312
304
313
305
TypeConverter typeConverter = registeredBean .getBeanFactory ().getTypeConverter ();
314
- Class <?> parameterType = dependencyDescriptor .getMethodParameter ().getParameterType ();
315
306
if (argumentValue != null ) {
316
- return (! argumentValue .isConverted ()) ?
317
- typeConverter .convertIfNecessary (argumentValue .getValue (), parameterType ) :
318
- argumentValue . getConvertedValue ( );
307
+ return (argumentValue .isConverted () ? argumentValue . getConvertedValue () :
308
+ typeConverter .convertIfNecessary (argumentValue .getValue (),
309
+ descriptor . getDependencyType (), descriptor . getMethodParameter ()) );
319
310
}
320
311
try {
321
- return registeredBean .resolveAutowiredArgument (dependencyDescriptor , typeConverter , autowiredBeans );
312
+ return registeredBean .resolveAutowiredArgument (descriptor , typeConverter , autowiredBeans );
322
313
}
323
314
catch (BeansException ex ) {
324
- throw new UnsatisfiedDependencyException (null , registeredBean .getBeanName (), dependencyDescriptor , ex );
315
+ throw new UnsatisfiedDependencyException (null , registeredBean .getBeanName (), descriptor , ex );
325
316
}
326
317
}
327
318
0 commit comments