BeanMethodInterceptor does not pass on null arguments for singleton beans

Issue: SPR-13887
This commit is contained in:
Juergen Hoeller
2016-02-19 14:00:52 +01:00
parent d6700b7a10
commit 5ed9046886
2 changed files with 48 additions and 10 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2002-2015 the original author or authors.
* Copyright 2002-2016 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -592,17 +592,23 @@ public class ConfigurationClassPostProcessorTests {
}
@Test
public void testPrototypeArgumentsThroughBeanMethodCall() {
public void testPrototypeArgumentThroughBeanMethodCall() {
ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanArgumentConfigWithPrototype.class);
ctx.getBean(FooFactory.class).createFoo(new BarArgument());
}
@Test
public void testSingletonArgumentsThroughBeanMethodCall() {
public void testSingletonArgumentThroughBeanMethodCall() {
ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanArgumentConfigWithSingleton.class);
ctx.getBean(FooFactory.class).createFoo(new BarArgument());
}
@Test
public void testNullArgumentThroughBeanMethodCall() {
ApplicationContext ctx = new AnnotationConfigApplicationContext(BeanArgumentConfigWithNull.class);
ctx.getBean("aFoo");
}
// -------------------------------------------------------------------------
@@ -1137,7 +1143,7 @@ public class ConfigurationClassPostProcessorTests {
@Bean
@Scope("prototype")
public DependingFoo foo(final BarArgument bar) {
public DependingFoo foo(BarArgument bar) {
return new DependingFoo(bar);
}
@@ -1145,7 +1151,7 @@ public class ConfigurationClassPostProcessorTests {
public FooFactory fooFactory() {
return new FooFactory() {
@Override
public DependingFoo createFoo(final BarArgument bar) {
public DependingFoo createFoo(BarArgument bar) {
return foo(bar);
}
};
@@ -1156,7 +1162,7 @@ public class ConfigurationClassPostProcessorTests {
static class BeanArgumentConfigWithSingleton {
@Bean @Lazy
public DependingFoo foo(final BarArgument bar) {
public DependingFoo foo(BarArgument bar) {
return new DependingFoo(bar);
}
@@ -1164,19 +1170,39 @@ public class ConfigurationClassPostProcessorTests {
public FooFactory fooFactory() {
return new FooFactory() {
@Override
public DependingFoo createFoo(final BarArgument bar) {
public DependingFoo createFoo(BarArgument bar) {
return foo(bar);
}
};
}
}
@Configuration
static class BeanArgumentConfigWithNull {
@Bean
public DependingFoo aFoo() {
return foo(null);
}
@Bean @Lazy
public DependingFoo foo(BarArgument bar) {
return new DependingFoo(bar);
}
@Bean
public BarArgument bar() {
return new BarArgument();
}
}
static class BarArgument {
}
static class DependingFoo {
DependingFoo(BarArgument bar) {
Assert.notNull(bar);
}
}