Merge branch '1.4.x' into 1.5.x

This commit is contained in:
Phillip Webb 2016-10-11 21:46:06 -07:00
commit d3e06c4627
3 changed files with 40 additions and 26 deletions

View File

@ -56,14 +56,13 @@ public class EmbeddedDataSourceConfigurationTests {
@Test
public void generateUniqueName() throws Exception {
this.context = load("spring.datasource.generate-unique-name=true");
AnnotationConfigApplicationContext context2 =
load("spring.datasource.generate-unique-name=true");
AnnotationConfigApplicationContext context2 = load(
"spring.datasource.generate-unique-name=true");
try {
DataSource dataSource = this.context.getBean(DataSource.class);
DataSource dataSource2 = context2.getBean(DataSource.class);
assertThat(getDatabaseName(dataSource))
.isNotEqualTo(getDatabaseName(dataSource2));
System.out.println(dataSource2);
}
finally {
context2.close();

View File

@ -478,8 +478,11 @@ public class MockitoPostProcessor extends InstantiationAwareBeanPostProcessorAda
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
if (bean instanceof FactoryBean) {
return bean;
}
return createSpyIfNecessary(bean, beanName);
}

View File

@ -39,40 +39,42 @@ class BeanCurrentlyInCreationFailureAnalyzer
@Override
protected FailureAnalysis analyze(Throwable rootFailure,
BeanCurrentlyInCreationException cause) {
List<BeanInCycle> beansInCycle = new ArrayList<BeanInCycle>();
List<BeanInCycle> cycle = new ArrayList<BeanInCycle>();
Throwable candidate = rootFailure;
int cycleStart = -1;
while (candidate != null) {
if (candidate instanceof BeanCreationException) {
BeanCreationException creationEx = (BeanCreationException) candidate;
if (StringUtils.hasText(creationEx.getBeanName())) {
BeanInCycle beanInCycle = new BeanInCycle(creationEx);
int index = beansInCycle.indexOf(beanInCycle);
if (index == -1) {
beansInCycle.add(beanInCycle);
}
else {
cycleStart = index;
}
BeanInCycle beanInCycle = BeanInCycle.get(candidate);
if (beanInCycle != null) {
int index = cycle.indexOf(beanInCycle);
if (index == -1) {
cycle.add(beanInCycle);
}
cycleStart = (cycleStart == -1 ? index : cycleStart);
}
candidate = candidate.getCause();
}
String message = buildMessage(cycle, cycleStart);
return new FailureAnalysis(message, null, cause);
}
private String buildMessage(List<BeanInCycle> beansInCycle, int cycleStart) {
StringBuilder message = new StringBuilder();
message.append(String.format("The dependencies of some of the beans in the "
+ "application context form a cycle:%n%n"));
for (int i = 0; i < beansInCycle.size(); i++) {
BeanInCycle beanInCycle = beansInCycle.get(i);
if (i == cycleStart) {
message.append(String.format("┌─────┐%n"));
}
else if (i > 0) {
message.append(String.format("%s ↓%n", i < cycleStart ? " " : ""));
String leftSide = (i < cycleStart ? " " : "");
message.append(String.format("%s ↓%n", leftSide));
}
message.append(String.format("%s %s%n", i < cycleStart ? " " : "|",
beansInCycle.get(i)));
String leftSide = i < cycleStart ? " " : "|";
message.append(String.format("%s %s%n", leftSide, beanInCycle));
}
message.append(String.format("└─────┘%n"));
return new FailureAnalysis(message.toString(), null, cause);
return message.toString();
}
private static final class BeanInCycle {
@ -114,14 +116,10 @@ class BeanCurrentlyInCreationFailureAnalyzer
if (this == obj) {
return true;
}
if (obj == null) {
if (obj == null || getClass() != obj.getClass()) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
BeanInCycle other = (BeanInCycle) obj;
return this.name.equals(other.name);
return this.name.equals(((BeanInCycle) obj).name);
}
@Override
@ -129,6 +127,20 @@ class BeanCurrentlyInCreationFailureAnalyzer
return this.name + this.description;
}
public static BeanInCycle get(Throwable ex) {
if (ex instanceof BeanCreationException) {
return get((BeanCreationException) ex);
}
return null;
}
private static BeanInCycle get(BeanCreationException ex) {
if (StringUtils.hasText(ex.getBeanName())) {
return new BeanInCycle(ex);
}
return null;
}
}
}