@@ -237,33 +237,28 @@ AutowiredArguments resolveArguments(RegisteredBean registeredBean) {
237237
238238 private AutowiredArguments resolveArguments (RegisteredBean registeredBean , Executable executable ) {
239239 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+
245241 int startIndex = (executable instanceof Constructor <?> constructor &&
246242 ClassUtils .isInnerClass (constructor .getDeclaringClass ())) ? 1 : 0 ;
247243 int parameterCount = executable .getParameterCount ();
248244 Object [] resolved = new Object [parameterCount - startIndex ];
249245 Assert .isTrue (this .shortcuts == null || this .shortcuts .length == resolved .length ,
250246 () -> "'shortcuts' must contain " + resolved .length + " elements" );
247+
248+ ConstructorArgumentValues argumentValues = resolveArgumentValues (registeredBean );
251249 Set <String > autowiredBeans = new LinkedHashSet <>(resolved .length );
252- ConstructorArgumentValues argumentValues = resolveArgumentValues (beanFactory ,
253- beanName , mergedBeanDefinition );
254250 for (int i = startIndex ; i < parameterCount ; i ++) {
255251 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 ) ;
258254 if (shortcut != null ) {
259- dependencyDescriptor = new ShortcutDependencyDescriptor (
260- dependencyDescriptor , shortcut , beanClass );
255+ descriptor = new ShortcutDependencyDescriptor (descriptor , shortcut , registeredBean .getBeanClass ());
261256 }
262257 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 );
265259 }
266- registerDependentBeans (beanFactory , beanName , autowiredBeans );
260+ registerDependentBeans (registeredBean .getBeanFactory (), registeredBean .getBeanName (), autowiredBeans );
261+
267262 return AutowiredArguments .of (resolved );
268263 }
269264
@@ -277,15 +272,14 @@ private MethodParameter getMethodParameter(Executable executable, int index) {
277272 throw new IllegalStateException ("Unsupported executable: " + executable .getClass ().getName ());
278273 }
279274
280- private ConstructorArgumentValues resolveArgumentValues (
281- AbstractAutowireCapableBeanFactory beanFactory , String beanName ,
282- RootBeanDefinition mergedBeanDefinition ) {
283-
275+ private ConstructorArgumentValues resolveArgumentValues (RegisteredBean registeredBean ) {
284276 ConstructorArgumentValues resolved = new ConstructorArgumentValues ();
285- if (mergedBeanDefinition .hasConstructorArgumentValues ()) {
277+ RootBeanDefinition beanDefinition = registeredBean .getMergedBeanDefinition ();
278+ if (beanDefinition .hasConstructorArgumentValues () &&
279+ registeredBean .getBeanFactory () instanceof AbstractAutowireCapableBeanFactory beanFactory ) {
286280 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 ();
289283 values .getIndexedArgumentValues ().forEach ((index , valueHolder ) -> {
290284 ValueHolder resolvedValue = resolveArgumentValue (valueResolver , valueHolder );
291285 resolved .addIndexedArgumentValue (index , resolvedValue );
@@ -298,30 +292,27 @@ private ValueHolder resolveArgumentValue(BeanDefinitionValueResolver resolver, V
298292 if (valueHolder .isConverted ()) {
299293 return valueHolder ;
300294 }
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 ;
307299 }
308300
309301 @ 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 ) {
312304
313305 TypeConverter typeConverter = registeredBean .getBeanFactory ().getTypeConverter ();
314- Class <?> parameterType = dependencyDescriptor .getMethodParameter ().getParameterType ();
315306 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 ()) );
319310 }
320311 try {
321- return registeredBean .resolveAutowiredArgument (dependencyDescriptor , typeConverter , autowiredBeans );
312+ return registeredBean .resolveAutowiredArgument (descriptor , typeConverter , autowiredBeans );
322313 }
323314 catch (BeansException ex ) {
324- throw new UnsatisfiedDependencyException (null , registeredBean .getBeanName (), dependencyDescriptor , ex );
315+ throw new UnsatisfiedDependencyException (null , registeredBean .getBeanName (), descriptor , ex );
325316 }
326317 }
327318
0 commit comments