From 6d6dc938fde2a0804de25b8f83344f30bef07088 Mon Sep 17 00:00:00 2001 From: Xiaolu Dai Date: Tue, 25 Jul 2023 21:01:54 +0800 Subject: [PATCH 1/3] fix native bean registration --- .../AzureGlobalPropertiesAutoConfiguration.java | 11 +++++++++++ .../src/main/resources/META-INF/spring/aot.factories | 3 +++ 2 files changed, 14 insertions(+) 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 From 0d11b7dd86f44a54bb30df6a948d3ca7e7d117c0 Mon Sep 17 00:00:00 2001 From: Xiaolu Dai Date: Thu, 27 Jul 2023 13:25:27 +0800 Subject: [PATCH 2/3] add test for BeanRegistrationExcludeFilter --- .../spring-cloud-azure-autoconfigure/pom.xml | 6 ++++ ...lobalPropertiesAutoConfigurationTests.java | 35 +++++++++++++++++++ 2 files changed, 41 insertions(+) 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/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); + }); + } + } From d3ff405c0b20e54dae705c02accd8e9d41eb0099 Mon Sep 17 00:00:00 2001 From: Muyao Date: Thu, 27 Jul 2023 14:40:02 +0800 Subject: [PATCH 3/3] fix pl and update cg --- eng/versioning/external_dependencies.txt | 1 + sdk/spring/CHANGELOG.md | 2 ++ 2 files changed, 3 insertions(+) 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.)