Skip to content

Commit 5a50fcb

Browse files
committed
Skip infrastructure beans
1 parent 8753789 commit 5a50fcb

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
@@ -44,6 +44,7 @@
4444
import org.springframework.beans.factory.aot.BeanRegistrationAotContribution;
4545
import org.springframework.beans.factory.aot.BeanRegistrationAotProcessor;
4646
import org.springframework.beans.factory.aot.BeanRegistrationCode;
47+
import org.springframework.beans.factory.config.BeanDefinition;
4748
import org.springframework.beans.factory.support.RegisteredBean;
4849
import org.springframework.core.KotlinDetector;
4950
import org.springframework.core.ResolvableType;
@@ -99,7 +100,7 @@ private static Validator getValidatorIfAvailable() {
99100

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

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

+18-4
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@
3737
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates;
3838
import org.springframework.aot.test.generate.TestGenerationContext;
3939
import org.springframework.beans.factory.aot.BeanRegistrationAotContribution;
40+
import org.springframework.beans.factory.config.BeanDefinition;
4041
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
4142
import org.springframework.beans.factory.support.RegisteredBean;
42-
import org.springframework.beans.factory.support.RootBeanDefinition;
4343
import org.springframework.core.OverridingClassLoader;
4444
import org.springframework.lang.Nullable;
4545

@@ -52,6 +52,9 @@
5252
import static java.lang.annotation.RetentionPolicy.RUNTIME;
5353
import static org.assertj.core.api.Assertions.assertThat;
5454
import static org.mockito.Mockito.mock;
55+
import static org.springframework.beans.factory.config.BeanDefinition.ROLE_APPLICATION;
56+
import static org.springframework.beans.factory.config.BeanDefinition.ROLE_INFRASTRUCTURE;
57+
import static org.springframework.beans.factory.support.BeanDefinitionBuilder.rootBeanDefinition;
5558

5659
/**
5760
* Tests for {@link BeanValidationBeanRegistrationAotProcessor}.
@@ -130,17 +133,28 @@ void shouldSkipConstraintWithMissingDependency() throws Exception {
130133
assertThat(this.generationContext.getRuntimeHints().reflection().typeHints()).isEmpty();
131134
}
132135

136+
@Test // gh-33940
137+
void shouldSkipInfrastructureBean() {
138+
process(EmptyClass.class, ROLE_INFRASTRUCTURE);
139+
assertThat(this.generationContext.getRuntimeHints().reflection().typeHints()).isEmpty();
140+
}
141+
133142
private void process(Class<?> beanClass) {
134-
BeanRegistrationAotContribution contribution = createContribution(beanClass);
143+
process(beanClass, ROLE_APPLICATION);
144+
}
145+
146+
private void process(Class<?> beanClass, int role) {
147+
BeanRegistrationAotContribution contribution = createContribution(beanClass, role);
135148
if (contribution != null) {
136149
contribution.applyTo(this.generationContext, mock());
137150
}
138151
}
139152

140153
@Nullable
141-
private BeanRegistrationAotContribution createContribution(Class<?> beanClass) {
154+
private BeanRegistrationAotContribution createContribution(Class<?> beanClass, int role) {
142155
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
143-
beanFactory.registerBeanDefinition(beanClass.getName(), new RootBeanDefinition(beanClass));
156+
BeanDefinition beanDefinition = rootBeanDefinition(beanClass).setRole(role).getBeanDefinition();
157+
beanFactory.registerBeanDefinition(beanClass.getName(), beanDefinition);
144158
return this.processor.processAheadOfTime(RegisteredBean.of(beanFactory, beanClass.getName()));
145159
}
146160

0 commit comments

Comments
 (0)