Polishing
This commit is contained in:
		
							parent
							
								
									e228f4ba64
								
							
						
					
					
						commit
						c8927ae753
					
				| 
						 | 
				
			
			@ -237,33 +237,28 @@ public final class BeanInstanceSupplier<T> extends AutowiredElementResolver impl
 | 
			
		|||
 | 
			
		||||
	private AutowiredArguments resolveArguments(RegisteredBean registeredBean, Executable executable) {
 | 
			
		||||
		Assert.isInstanceOf(AbstractAutowireCapableBeanFactory.class, registeredBean.getBeanFactory());
 | 
			
		||||
		String beanName = registeredBean.getBeanName();
 | 
			
		||||
		Class<?> beanClass = registeredBean.getBeanClass();
 | 
			
		||||
		AbstractAutowireCapableBeanFactory beanFactory =
 | 
			
		||||
				(AbstractAutowireCapableBeanFactory) registeredBean.getBeanFactory();
 | 
			
		||||
		RootBeanDefinition mergedBeanDefinition = registeredBean.getMergedBeanDefinition();
 | 
			
		||||
 | 
			
		||||
		int startIndex = (executable instanceof Constructor<?> constructor &&
 | 
			
		||||
				ClassUtils.isInnerClass(constructor.getDeclaringClass())) ? 1 : 0;
 | 
			
		||||
		int parameterCount = executable.getParameterCount();
 | 
			
		||||
		Object[] resolved = new Object[parameterCount - startIndex];
 | 
			
		||||
		Assert.isTrue(this.shortcuts == null || this.shortcuts.length == resolved.length,
 | 
			
		||||
				() -> "'shortcuts' must contain " + resolved.length + " elements");
 | 
			
		||||
 | 
			
		||||
		ConstructorArgumentValues argumentValues = resolveArgumentValues(registeredBean);
 | 
			
		||||
		Set<String> autowiredBeans = new LinkedHashSet<>(resolved.length);
 | 
			
		||||
		ConstructorArgumentValues argumentValues = resolveArgumentValues(beanFactory,
 | 
			
		||||
				beanName, mergedBeanDefinition);
 | 
			
		||||
		for (int i = startIndex; i < parameterCount; i++) {
 | 
			
		||||
			MethodParameter parameter = getMethodParameter(executable, i);
 | 
			
		||||
			DependencyDescriptor dependencyDescriptor = new DependencyDescriptor(parameter, true);
 | 
			
		||||
			String shortcut = (this.shortcuts != null) ? this.shortcuts[i - startIndex] : null;
 | 
			
		||||
			DependencyDescriptor descriptor = new DependencyDescriptor(parameter, true);
 | 
			
		||||
			String shortcut = (this.shortcuts != null ? this.shortcuts[i - startIndex] : null);
 | 
			
		||||
			if (shortcut != null) {
 | 
			
		||||
				dependencyDescriptor = new ShortcutDependencyDescriptor(
 | 
			
		||||
						dependencyDescriptor, shortcut, beanClass);
 | 
			
		||||
				descriptor = new ShortcutDependencyDescriptor(descriptor, shortcut, registeredBean.getBeanClass());
 | 
			
		||||
			}
 | 
			
		||||
			ValueHolder argumentValue = argumentValues.getIndexedArgumentValue(i, null);
 | 
			
		||||
			resolved[i - startIndex] = resolveArgument(registeredBean,autowiredBeans,
 | 
			
		||||
					dependencyDescriptor, argumentValue);
 | 
			
		||||
			resolved[i - startIndex] = resolveArgument(registeredBean, descriptor, argumentValue, autowiredBeans);
 | 
			
		||||
		}
 | 
			
		||||
		registerDependentBeans(beanFactory, beanName, autowiredBeans);
 | 
			
		||||
		registerDependentBeans(registeredBean.getBeanFactory(), registeredBean.getBeanName(), autowiredBeans);
 | 
			
		||||
 | 
			
		||||
		return AutowiredArguments.of(resolved);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -277,15 +272,14 @@ public final class BeanInstanceSupplier<T> extends AutowiredElementResolver impl
 | 
			
		|||
		throw new IllegalStateException("Unsupported executable: " + executable.getClass().getName());
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private ConstructorArgumentValues resolveArgumentValues(
 | 
			
		||||
			AbstractAutowireCapableBeanFactory beanFactory, String beanName,
 | 
			
		||||
			RootBeanDefinition mergedBeanDefinition) {
 | 
			
		||||
 | 
			
		||||
	private ConstructorArgumentValues resolveArgumentValues(RegisteredBean registeredBean) {
 | 
			
		||||
		ConstructorArgumentValues resolved = new ConstructorArgumentValues();
 | 
			
		||||
		if (mergedBeanDefinition.hasConstructorArgumentValues()) {
 | 
			
		||||
		RootBeanDefinition beanDefinition = registeredBean.getMergedBeanDefinition();
 | 
			
		||||
		if (beanDefinition.hasConstructorArgumentValues() &&
 | 
			
		||||
				registeredBean.getBeanFactory() instanceof AbstractAutowireCapableBeanFactory beanFactory) {
 | 
			
		||||
			BeanDefinitionValueResolver valueResolver = new BeanDefinitionValueResolver(
 | 
			
		||||
					beanFactory, beanName, mergedBeanDefinition, beanFactory.getTypeConverter());
 | 
			
		||||
			ConstructorArgumentValues values = mergedBeanDefinition.getConstructorArgumentValues();
 | 
			
		||||
					beanFactory, registeredBean.getBeanName(), beanDefinition, beanFactory.getTypeConverter());
 | 
			
		||||
			ConstructorArgumentValues values = beanDefinition.getConstructorArgumentValues();
 | 
			
		||||
			values.getIndexedArgumentValues().forEach((index, valueHolder) -> {
 | 
			
		||||
				ValueHolder resolvedValue = resolveArgumentValue(valueResolver, valueHolder);
 | 
			
		||||
				resolved.addIndexedArgumentValue(index, resolvedValue);
 | 
			
		||||
| 
						 | 
				
			
			@ -298,30 +292,27 @@ public final class BeanInstanceSupplier<T> extends AutowiredElementResolver impl
 | 
			
		|||
		if (valueHolder.isConverted()) {
 | 
			
		||||
			return valueHolder;
 | 
			
		||||
		}
 | 
			
		||||
		Object resolvedValue = resolver.resolveValueIfNecessary("constructor argument",
 | 
			
		||||
				valueHolder.getValue());
 | 
			
		||||
		ValueHolder resolvedValueHolder = new ValueHolder(resolvedValue,
 | 
			
		||||
				valueHolder.getType(), valueHolder.getName());
 | 
			
		||||
		resolvedValueHolder.setSource(valueHolder);
 | 
			
		||||
		return resolvedValueHolder;
 | 
			
		||||
		Object value = resolver.resolveValueIfNecessary("constructor argument", valueHolder.getValue());
 | 
			
		||||
		ValueHolder resolvedHolder = new ValueHolder(value, valueHolder.getType(), valueHolder.getName());
 | 
			
		||||
		resolvedHolder.setSource(valueHolder);
 | 
			
		||||
		return resolvedHolder;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	@Nullable
 | 
			
		||||
	private Object resolveArgument(RegisteredBean registeredBean, Set<String> autowiredBeans,
 | 
			
		||||
			DependencyDescriptor dependencyDescriptor, @Nullable ValueHolder argumentValue) {
 | 
			
		||||
	private Object resolveArgument(RegisteredBean registeredBean, DependencyDescriptor descriptor,
 | 
			
		||||
			@Nullable ValueHolder argumentValue, Set<String> autowiredBeans) {
 | 
			
		||||
 | 
			
		||||
		TypeConverter typeConverter = registeredBean.getBeanFactory().getTypeConverter();
 | 
			
		||||
		Class<?> parameterType = dependencyDescriptor.getMethodParameter().getParameterType();
 | 
			
		||||
		if (argumentValue != null) {
 | 
			
		||||
			return (!argumentValue.isConverted()) ?
 | 
			
		||||
					typeConverter.convertIfNecessary(argumentValue.getValue(), parameterType) :
 | 
			
		||||
					argumentValue.getConvertedValue();
 | 
			
		||||
			return (argumentValue.isConverted() ? argumentValue.getConvertedValue() :
 | 
			
		||||
					typeConverter.convertIfNecessary(argumentValue.getValue(),
 | 
			
		||||
							descriptor.getDependencyType(), descriptor.getMethodParameter()));
 | 
			
		||||
		}
 | 
			
		||||
		try {
 | 
			
		||||
			return registeredBean.resolveAutowiredArgument(dependencyDescriptor, typeConverter, autowiredBeans);
 | 
			
		||||
			return registeredBean.resolveAutowiredArgument(descriptor, typeConverter, autowiredBeans);
 | 
			
		||||
		}
 | 
			
		||||
		catch (BeansException ex) {
 | 
			
		||||
			throw new UnsatisfiedDependencyException(null, registeredBean.getBeanName(), dependencyDescriptor, ex);
 | 
			
		||||
			throw new UnsatisfiedDependencyException(null, registeredBean.getBeanName(), descriptor, ex);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,8 +57,9 @@ public abstract class AbstractApplicationContextTests extends AbstractListableBe
 | 
			
		|||
 | 
			
		||||
	protected TestApplicationListener parentListener = new TestApplicationListener();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	@BeforeEach
 | 
			
		||||
	public void setUp() throws Exception {
 | 
			
		||||
	public void setup() throws Exception {
 | 
			
		||||
		this.applicationContext = createContext();
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -79,6 +80,7 @@ public abstract class AbstractApplicationContextTests extends AbstractListableBe
 | 
			
		|||
	 */
 | 
			
		||||
	protected abstract ConfigurableApplicationContext createContext() throws Exception;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	@Test
 | 
			
		||||
	public void contextAwareSingletonWasCalledBack() throws Exception {
 | 
			
		||||
		ACATester aca = (ACATester) applicationContext.getBean("aca");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue