diff --git a/eng/versioning/external_dependencies.txt b/eng/versioning/external_dependencies.txt
index 70a4aa6aa8ba..54d9781ed3cb 100644
--- a/eng/versioning/external_dependencies.txt
+++ b/eng/versioning/external_dependencies.txt
@@ -153,6 +153,7 @@ org.springframework:spring-beans;6.0.7
org.springframework:spring-context-support;6.0.7
org.springframework:spring-context;6.0.7
org.springframework:spring-core;6.0.7
+org.springframework:spring-core-test;6.0.7
org.springframework:spring-expression;6.0.7
org.springframework:spring-jdbc;6.0.7
org.springframework:spring-jms;6.0.7
diff --git a/sdk/spring/CHANGELOG.md b/sdk/spring/CHANGELOG.md
index 0eabc5176cc7..9cb6623943e5 100644
--- a/sdk/spring/CHANGELOG.md
+++ b/sdk/spring/CHANGELOG.md
@@ -8,6 +8,8 @@ This section includes changes in `spring-cloud-azure-autoconfigure` module.
#### Bugs Fixed
- Fix the issue that `AzureMessagingListenerAutoConfiguration` not included in spring.factories [#34690](https://github.com/Azure/azure-sdk-for-java/issues/34690), [#35717](https://github.com/Azure/azure-sdk-for-java/pull/35717).
+- Exclude unsupported bean `AzureGlobalProperties` from AOT processing and registration [#36001](https://github.com/Azure/azure-sdk-for-java/issues/36001).
+
## 5.3.0 (2023-06-28)
- This release is compatible with Spring Boot 3.0.0-3.1.0. (Note: 3.0.x (x>1) should be supported, but they aren't tested with this release.)
- This release is compatible with Spring Cloud 2022.0.0-2022.0.3. (Note: 2022.0.x (x>0) should be supported, but they aren't tested with this release.)
diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml
index 699980da98c5..a38ca408a90d 100644
--- a/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml
+++ b/sdk/spring/spring-cloud-azure-autoconfigure/pom.xml
@@ -307,6 +307,12 @@
3.0.5
test
+
+ org.springframework
+ spring-core-test
+ 6.0.7
+ test
+
org.springframework.boot
spring-boot-configuration-metadata
diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/context/AzureGlobalPropertiesAutoConfiguration.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/context/AzureGlobalPropertiesAutoConfiguration.java
index 977141160659..c169fbb1c6c4 100644
--- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/context/AzureGlobalPropertiesAutoConfiguration.java
+++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/java/com/azure/spring/cloud/autoconfigure/implementation/context/AzureGlobalPropertiesAutoConfiguration.java
@@ -4,7 +4,9 @@
package com.azure.spring.cloud.autoconfigure.implementation.context;
import com.azure.spring.cloud.autoconfigure.implementation.context.properties.AzureGlobalProperties;
+import org.springframework.beans.factory.aot.BeanRegistrationExcludeFilter;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
+import org.springframework.beans.factory.support.RegisteredBean;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.context.properties.bind.Binder;
import org.springframework.context.EnvironmentAware;
@@ -46,4 +48,13 @@ public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata,
}
}
+
+ static class AzureGlobalPropertiesBeanRegistrationExcludeFilter implements BeanRegistrationExcludeFilter {
+
+ @Override
+ public boolean isExcludedFromAotProcessing(RegisteredBean registeredBean) {
+ return AZURE_GLOBAL_PROPERTY_BEAN_NAME.equals(registeredBean.getBeanName());
+ }
+
+ }
}
diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/resources/META-INF/spring/aot.factories b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/resources/META-INF/spring/aot.factories
index c8c00138e7b9..32f5794a27a4 100644
--- a/sdk/spring/spring-cloud-azure-autoconfigure/src/main/resources/META-INF/spring/aot.factories
+++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/main/resources/META-INF/spring/aot.factories
@@ -1,2 +1,5 @@
org.springframework.aot.hint.RuntimeHintsRegistrar= \
com.azure.spring.cloud.autoconfigure.implementation.jdbc.PasswordlessRuntimeHints
+
+org.springframework.beans.factory.aot.BeanRegistrationExcludeFilter=\
+com.azure.spring.cloud.autoconfigure.implementation.context.AzureGlobalPropertiesAutoConfiguration.AzureGlobalPropertiesBeanRegistrationExcludeFilter
diff --git a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/context/AzureGlobalPropertiesAutoConfigurationTests.java b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/context/AzureGlobalPropertiesAutoConfigurationTests.java
index 54d611f90f63..91671ef38db7 100644
--- a/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/context/AzureGlobalPropertiesAutoConfigurationTests.java
+++ b/sdk/spring/spring-cloud-azure-autoconfigure/src/test/java/com/azure/spring/cloud/autoconfigure/implementation/context/AzureGlobalPropertiesAutoConfigurationTests.java
@@ -7,11 +7,20 @@
import com.azure.spring.cloud.autoconfigure.implementation.context.properties.AzureGlobalProperties;
import com.azure.spring.cloud.core.provider.RetryOptionsProvider;
import org.junit.jupiter.api.Test;
+import org.springframework.aot.test.generate.TestGenerationContext;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
+import org.springframework.context.ApplicationContextInitializer;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+import org.springframework.context.aot.ApplicationContextAotGenerator;
+import org.springframework.context.support.GenericApplicationContext;
+import org.springframework.core.test.tools.CompileWithForkedClassLoader;
+import org.springframework.core.test.tools.TestCompiler;
+import org.springframework.javapoet.ClassName;
import java.time.Duration;
import java.util.Arrays;
+import java.util.function.Consumer;
import static com.azure.spring.cloud.core.provider.AzureProfileOptionsProvider.CloudType.AZURE;
import static com.azure.spring.cloud.core.provider.AzureProfileOptionsProvider.CloudType.AZURE_CHINA;
@@ -158,4 +167,30 @@ void testAzureProfileAzureChina() {
});
}
+ @Test
+ @CompileWithForkedClassLoader
+ void processAheadOfTimeDoesNotRegisterAzureGlobalProperties() {
+ GenericApplicationContext context = new AnnotationConfigApplicationContext();
+ context.registerBean(AzureGlobalPropertiesAutoConfiguration.class);
+ compile(context, (freshContext) -> {
+ freshContext.refresh();
+ assertThat(freshContext.getBeansOfType(AzureGlobalProperties.class)).isEmpty();
+ });
+ }
+
+ @SuppressWarnings("unchecked")
+ private void compile(GenericApplicationContext context, Consumer freshContext) {
+ TestGenerationContext generationContext = new TestGenerationContext(
+ ClassName.get(getClass().getPackageName(), "TestTarget"));
+ ClassName className = new ApplicationContextAotGenerator().processAheadOfTime(context, generationContext);
+ generationContext.writeGeneratedContent();
+ TestCompiler.forSystem().with(generationContext).compile((compiled) -> {
+ GenericApplicationContext freshApplicationContext = new GenericApplicationContext();
+ ApplicationContextInitializer initializer = compiled
+ .getInstance(ApplicationContextInitializer.class, className.toString());
+ initializer.initialize(freshApplicationContext);
+ freshContext.accept(freshApplicationContext);
+ });
+ }
+
}