Skip to content

Commit dff7aa4

Browse files
committed
Fall back to type-based creation if no bean of the given name exists
Closes gh-30683
1 parent c634acd commit dff7aa4

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

spring-orm/src/main/java/org/springframework/orm/hibernate5/SpringBeanContainer.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ private SpringContainedBean<?> createBean(
143143

144144
try {
145145
if (lifecycleOptions.useJpaCompliantCreation()) {
146-
return new SpringContainedBean<>(
146+
return new SpringContainedBean<>( // to be replaced with plain createBean(Class)
147147
this.beanFactory.createBean(beanType, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false),
148148
this.beanFactory::destroyBean);
149149
}
@@ -180,14 +180,23 @@ private SpringContainedBean<?> createBean(
180180

181181
try {
182182
if (lifecycleOptions.useJpaCompliantCreation()) {
183-
Object bean = this.beanFactory.autowire(beanType, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false);
184-
this.beanFactory.autowireBeanProperties(bean, AutowireCapableBeanFactory.AUTOWIRE_NO, false);
185-
this.beanFactory.applyBeanPropertyValues(bean, name);
186-
bean = this.beanFactory.initializeBean(bean, name);
187-
return new SpringContainedBean<>(bean, beanInstance -> this.beanFactory.destroyBean(name, beanInstance));
183+
if (this.beanFactory.containsBean(name)) {
184+
Object bean = this.beanFactory.autowire(beanType, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false);
185+
this.beanFactory.autowireBeanProperties(bean, AutowireCapableBeanFactory.AUTOWIRE_NO, false);
186+
this.beanFactory.applyBeanPropertyValues(bean, name);
187+
bean = this.beanFactory.initializeBean(bean, name);
188+
return new SpringContainedBean<>(bean, beanInstance -> this.beanFactory.destroyBean(name, beanInstance));
189+
}
190+
else {
191+
return new SpringContainedBean<>( // to be replaced with plain createBean(Class)
192+
this.beanFactory.createBean(beanType, AutowireCapableBeanFactory.AUTOWIRE_CONSTRUCTOR, false),
193+
this.beanFactory::destroyBean);
194+
}
188195
}
189196
else {
190-
return new SpringContainedBean<>(this.beanFactory.getBean(name, beanType));
197+
return (this.beanFactory.containsBean(name) ?
198+
new SpringContainedBean<>(this.beanFactory.getBean(name, beanType)) :
199+
new SpringContainedBean<>(this.beanFactory.getBean(beanType)));
191200
}
192201
}
193202
catch (BeansException ex) {

0 commit comments

Comments
 (0)