Skip to content

Commit 8124491

Browse files
committed
Merge branch '6.1.x'
2 parents c21090a + c99e7f8 commit 8124491

File tree

2 files changed

+45
-3
lines changed

2 files changed

+45
-3
lines changed

spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1152,9 +1152,11 @@ protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd
11521152
"Bean class isn't public, and non-public access not allowed: " + beanClass.getName());
11531153
}
11541154

1155-
Supplier<?> instanceSupplier = mbd.getInstanceSupplier();
1156-
if (instanceSupplier != null) {
1157-
return obtainFromSupplier(instanceSupplier, beanName, mbd);
1155+
if (args == null) {
1156+
Supplier<?> instanceSupplier = mbd.getInstanceSupplier();
1157+
if (instanceSupplier != null) {
1158+
return obtainFromSupplier(instanceSupplier, beanName, mbd);
1159+
}
11581160
}
11591161

11601162
if (mbd.getFactoryMethodName() != null) {

spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1956,6 +1956,42 @@ void getBeanByTypeInstanceFiltersOutNonAutowireCandidates() {
19561956
lbf.getBean(TestBean.class, 67));
19571957
}
19581958

1959+
@Test
1960+
void getBeanByTypeInstanceWithConstructorIgnoresInstanceSupplier() {
1961+
RootBeanDefinition bd1 = createConstructorDependencyBeanDefinition(99);
1962+
bd1.setInstanceSupplier(() -> new ConstructorDependency(new TestBean("test")));
1963+
lbf.registerBeanDefinition("bd1", bd1);
1964+
1965+
ConstructorDependency defaultInstance = lbf.getBean(ConstructorDependency.class);
1966+
assertThat(defaultInstance.beanName).isEqualTo("bd1");
1967+
assertThat(defaultInstance.spouseAge).isEqualTo(0);
1968+
1969+
ConstructorDependency argsInstance = lbf.getBean(ConstructorDependency.class, 42);
1970+
assertThat(argsInstance.beanName).isEqualTo("bd1");
1971+
assertThat(argsInstance.spouseAge).isEqualTo(42);
1972+
}
1973+
1974+
@Test
1975+
void getBeanByTypeInstanceWithFactoryMethodIgnoresInstanceSupplier() {
1976+
RootBeanDefinition bd1 = new RootBeanDefinition(TestBean.class);
1977+
bd1.setScope(BeanDefinition.SCOPE_PROTOTYPE);
1978+
bd1.setFactoryBeanName("config");
1979+
bd1.setFactoryMethodName("create");
1980+
bd1.setInstanceSupplier(() -> new TestBean("test"));
1981+
lbf.registerBeanDefinition("config", new RootBeanDefinition(BeanWithFactoryMethod.class));
1982+
lbf.registerBeanDefinition("bd1", bd1);
1983+
1984+
TestBean defaultInstance = lbf.getBean(TestBean.class);
1985+
assertThat(defaultInstance.getBeanName()).isEqualTo("bd1");
1986+
assertThat(defaultInstance.getName()).isEqualTo("test");
1987+
assertThat(defaultInstance.getAge()).isEqualTo(0);
1988+
1989+
TestBean argsInstance = lbf.getBean(TestBean.class, "another", 42);
1990+
assertThat(argsInstance.getBeanName()).isEqualTo("bd1");
1991+
assertThat(argsInstance.getName()).isEqualTo("another");
1992+
assertThat(argsInstance.getAge()).isEqualTo(42);
1993+
}
1994+
19591995
@Test
19601996
@SuppressWarnings("rawtypes")
19611997
void beanProviderSerialization() throws Exception {
@@ -3192,6 +3228,10 @@ public TestBean create() {
31923228
return tb;
31933229
}
31943230

3231+
public TestBean create(String name, int age) {
3232+
return new TestBean(name, age);
3233+
}
3234+
31953235
public TestBean createWithArgs(String arg) {
31963236
TestBean tb = new TestBean();
31973237
tb.setName(arg);

0 commit comments

Comments
 (0)