Skip to content

Commit b060d6c

Browse files
committed
Skip infrastructure beans
1 parent a4af503 commit b060d6c

File tree

2 files changed

+20
-5
lines changed

2 files changed

+20
-5
lines changed

spring-context/src/main/java/org/springframework/validation/beanvalidation/BeanValidationBeanRegistrationAotProcessor.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import org.springframework.beans.factory.aot.BeanRegistrationAotContribution;
4444
import org.springframework.beans.factory.aot.BeanRegistrationAotProcessor;
4545
import org.springframework.beans.factory.aot.BeanRegistrationCode;
46+
import org.springframework.beans.factory.config.BeanDefinition;
4647
import org.springframework.beans.factory.support.RegisteredBean;
4748
import org.springframework.core.KotlinDetector;
4849
import org.springframework.core.ResolvableType;
@@ -98,7 +99,7 @@ private static Validator getValidatorIfAvailable() {
9899

99100
@Nullable
100101
public static BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) {
101-
if (validator == null) {
102+
if (validator == null || BeanDefinition.ROLE_INFRASTRUCTURE == registeredBean.getMergedBeanDefinition().getRole()) {
102103
return null;
103104
}
104105

spring-context/src/test/java/org/springframework/validation/beanvalidation/BeanValidationBeanRegistrationAotProcessorTests.java

+18-4
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@
4141
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates;
4242
import org.springframework.aot.test.generate.TestGenerationContext;
4343
import org.springframework.beans.factory.aot.BeanRegistrationAotContribution;
44+
import org.springframework.beans.factory.config.BeanDefinition;
4445
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
4546
import org.springframework.beans.factory.support.RegisteredBean;
46-
import org.springframework.beans.factory.support.RootBeanDefinition;
4747
import org.springframework.core.OverridingClassLoader;
4848
import org.springframework.lang.Nullable;
4949

@@ -56,6 +56,9 @@
5656
import static java.lang.annotation.RetentionPolicy.RUNTIME;
5757
import static org.assertj.core.api.Assertions.assertThat;
5858
import static org.mockito.Mockito.mock;
59+
import static org.springframework.beans.factory.config.BeanDefinition.ROLE_APPLICATION;
60+
import static org.springframework.beans.factory.config.BeanDefinition.ROLE_INFRASTRUCTURE;
61+
import static org.springframework.beans.factory.support.BeanDefinitionBuilder.rootBeanDefinition;
5962

6063
/**
6164
* Tests for {@link BeanValidationBeanRegistrationAotProcessor}.
@@ -143,17 +146,28 @@ void shouldSkipConstraintWithMissingDependency() throws Exception {
143146
assertThat(this.generationContext.getRuntimeHints().reflection().typeHints()).isEmpty();
144147
}
145148

149+
@Test // gh-33940
150+
void shouldSkipInfrastructureBean() {
151+
process(EmptyClass.class, ROLE_INFRASTRUCTURE);
152+
assertThat(this.generationContext.getRuntimeHints().reflection().typeHints()).isEmpty();
153+
}
154+
146155
private void process(Class<?> beanClass) {
147-
BeanRegistrationAotContribution contribution = createContribution(beanClass);
156+
process(beanClass, ROLE_APPLICATION);
157+
}
158+
159+
private void process(Class<?> beanClass, int role) {
160+
BeanRegistrationAotContribution contribution = createContribution(beanClass, role);
148161
if (contribution != null) {
149162
contribution.applyTo(this.generationContext, mock());
150163
}
151164
}
152165

153166
@Nullable
154-
private BeanRegistrationAotContribution createContribution(Class<?> beanClass) {
167+
private BeanRegistrationAotContribution createContribution(Class<?> beanClass, int role) {
155168
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
156-
beanFactory.registerBeanDefinition(beanClass.getName(), new RootBeanDefinition(beanClass));
169+
BeanDefinition beanDefinition = rootBeanDefinition(beanClass).setRole(role).getBeanDefinition();
170+
beanFactory.registerBeanDefinition(beanClass.getName(), beanDefinition);
157171
return this.processor.processAheadOfTime(RegisteredBean.of(beanFactory, beanClass.getName()));
158172
}
159173

0 commit comments

Comments
 (0)