Merge branch '2.1.x'

Closes gh-17948
This commit is contained in:
Andy Wilkinson
2019-08-23 19:09:09 +01:00
2 changed files with 127 additions and 3 deletions

View File

@@ -27,6 +27,7 @@ import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.springframework.aop.scope.ScopedObject;
import org.springframework.aop.scope.ScopedProxyUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.PropertyValues;
@@ -357,6 +358,9 @@ public class MockitoPostProcessor extends InstantiationAwareBeanPostProcessorAda
Assert.state(ReflectionUtils.getField(field, target) == null,
() -> "The field " + field + " cannot have an existing value");
Object bean = this.beanFactory.getBean(beanName, field.getType());
if (bean instanceof ScopedObject) {
bean = ((ScopedObject) bean).getTargetObject();
}
ReflectionUtils.setField(field, target, bean);
}
catch (Throwable ex) {
@@ -442,15 +446,22 @@ public class MockitoPostProcessor extends InstantiationAwareBeanPostProcessorAda
@Override
public Object getEarlyBeanReference(Object bean, String beanName) throws BeansException {
return this.mockitoPostProcessor.createSpyIfNecessary(bean, beanName);
return this.mockitoPostProcessor.createSpyIfNecessary(bean, getOriginalBeanNameIfScopedTarget(beanName));
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if (bean instanceof FactoryBean) {
if (bean instanceof FactoryBean || bean instanceof ScopedObject) {
return bean;
}
return this.mockitoPostProcessor.createSpyIfNecessary(bean, beanName);
return this.mockitoPostProcessor.createSpyIfNecessary(bean, getOriginalBeanNameIfScopedTarget(beanName));
}
private String getOriginalBeanNameIfScopedTarget(String beanName) {
if (ScopedProxyUtils.isScopedTarget(beanName)) {
return beanName.substring("scopedTarget.".length());
}
return beanName;
}
static void register(BeanDefinitionRegistry registry) {