Skip to content

Commit f4062bc

Browse files
committed
AbstractAutowireCapableBeanFactory's createBean/autowireBean/configureBean use CacheUtils.isCacheSafe to re-enable PropertyDescriptor caching
Issue: SPR-11875 (cherry picked from commit c32d559)
1 parent 0298a1f commit f4062bc

File tree

1 file changed

+4
-3
lines changed

1 file changed

+4
-3
lines changed

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,15 +285,15 @@ public <T> T createBean(Class<T> beanClass) throws BeansException {
285285
// Use prototype bean definition, to avoid registering bean as dependent bean.
286286
RootBeanDefinition bd = new RootBeanDefinition(beanClass);
287287
bd.setScope(SCOPE_PROTOTYPE);
288-
bd.allowCaching = false;
288+
bd.allowCaching = ClassUtils.isCacheSafe(beanClass, getBeanClassLoader());
289289
return (T) createBean(beanClass.getName(), bd, null);
290290
}
291291

292292
public void autowireBean(Object existingBean) {
293293
// Use non-singleton bean definition, to avoid registering bean as dependent bean.
294294
RootBeanDefinition bd = new RootBeanDefinition(ClassUtils.getUserClass(existingBean));
295295
bd.setScope(BeanDefinition.SCOPE_PROTOTYPE);
296-
bd.allowCaching = false;
296+
bd.allowCaching = ClassUtils.isCacheSafe(bd.getBeanClass(), getBeanClassLoader());
297297
BeanWrapper bw = new BeanWrapperImpl(existingBean);
298298
initBeanWrapper(bw);
299299
populateBean(bd.getBeanClass().getName(), bd, bw);
@@ -312,7 +312,7 @@ public Object configureBean(Object existingBean, String beanName) throws BeansEx
312312
bd = new RootBeanDefinition(mbd);
313313
}
314314
bd.setScope(BeanDefinition.SCOPE_PROTOTYPE);
315-
bd.allowCaching = false;
315+
bd.allowCaching = ClassUtils.isCacheSafe(ClassUtils.getUserClass(existingBean), getBeanClassLoader());
316316
}
317317
BeanWrapper bw = new BeanWrapperImpl(existingBean);
318318
initBeanWrapper(bw);
@@ -711,6 +711,7 @@ class Holder { Class<?> value = null; }
711711
final Holder objectType = new Holder();
712712
String factoryBeanName = mbd.getFactoryBeanName();
713713
final String factoryMethodName = mbd.getFactoryMethodName();
714+
714715
if (factoryBeanName != null && factoryMethodName != null) {
715716
// Try to obtain the FactoryBean's object type without instantiating it at all.
716717
BeanDefinition fbDef = getBeanDefinition(factoryBeanName);

0 commit comments

Comments
 (0)