From 0a20c8a44a842a99c8f86d68bb0071e5c33bdef7 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 29 Jun 2023 12:04:53 +0200 Subject: [PATCH] Restore defensive access to volatile field in getBeanClassName() Closes gh-30773 --- .../beans/factory/support/AbstractBeanDefinition.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanDefinition.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanDefinition.java index 5e049f8d2b0..b3cbede7482 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanDefinition.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanDefinition.java @@ -390,7 +390,8 @@ public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccess @Override @Nullable public String getBeanClassName() { - return (this.beanClass instanceof Class clazz ? clazz.getName() : (String) this.beanClass); + Object beanClassObject = this.beanClass; // defensive access to volatile beanClass field + return (beanClassObject instanceof Class clazz ? clazz.getName() : (String) beanClassObject); } /** @@ -423,7 +424,7 @@ public abstract class AbstractBeanDefinition extends BeanMetadataAttributeAccess * @see #resolveBeanClass(ClassLoader) */ public Class getBeanClass() throws IllegalStateException { - Object beanClassObject = this.beanClass; + Object beanClassObject = this.beanClass; // defensive access to volatile beanClass field if (beanClassObject == null) { throw new IllegalStateException("No bean class specified on bean definition"); }