Don't use BeanRegistrationExcludeFilter as an exclude signal

Closes gh-28833
This commit is contained in:
Phillip Webb 2022-07-27 15:15:45 +01:00
parent 472c23455a
commit e928943d1a
3 changed files with 24 additions and 10 deletions

View File

@ -111,11 +111,14 @@ class BeanDefinitionMethodGeneratorFactory {
private boolean isImplicitlyExcluded(RegisteredBean registeredBean) {
Class<?> beanClass = registeredBean.getBeanClass();
if (BeanRegistrationExcludeFilter.class.isAssignableFrom(beanClass)) {
return false;
if (BeanFactoryInitializationAotProcessor.class.isAssignableFrom(beanClass)) {
return true;
}
return BeanFactoryInitializationAotProcessor.class.isAssignableFrom(beanClass)
|| BeanRegistrationAotProcessor.class.isAssignableFrom(beanClass);
if (BeanRegistrationAotProcessor.class.isAssignableFrom(beanClass)) {
BeanRegistrationAotProcessor processor = this.aotProcessors.findByBeanName(registeredBean.getBeanName());
return (processor == null) || processor.isBeanExcludedFromAotProcessing();
}
return false;
}
private List<BeanRegistrationAotContribution> getAotContributions(

View File

@ -47,4 +47,16 @@ public interface BeanRegistrationAotProcessor {
@Nullable
BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean);
/**
* Return if the bean instance associated with this processor should be
* excluded from AOT processing itself. By default this method will return
* {@code true} to automatically exclude the bean, if the definition should
* be written then this method may be overridden to return {@code true}.
* @return if the bean should be excluded from AOT processing
* @see BeanRegistrationExcludeFilter
*/
default boolean isBeanExcludedFromAotProcessing() {
return true;
}
}

View File

@ -127,11 +127,11 @@ class BeanDefinitionMethodGeneratorFactoryTests {
}
@Test
void getBeanDefinitionMethodGeneratorWhenRegisteredBeanIsAotProcessorAndFiltersBeanBeanRegistrationExcludeFilterDoesNotFilterBean() {
void getBeanDefinitionMethodGeneratorWhenRegisteredBeanIsAotProcessorAndIsNotExcludedAndBeanRegistrationExcludeFilterDoesNotFilterBean() {
MockSpringFactoriesLoader springFactoriesLoader = new MockSpringFactoriesLoader();
DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
beanFactory.registerBeanDefinition("test", BeanDefinitionBuilder
.rootBeanDefinition(TestBeanRegistrationAotProcessorAndFilterBean.class).getBeanDefinition());
.rootBeanDefinition(TestBeanRegistrationAotProcessorAndNotExcluded.class).getBeanDefinition());
RegisteredBean registeredBean1 = RegisteredBean.of(beanFactory, "test");
BeanDefinitionMethodGeneratorFactory methodGeneratorFactory = new BeanDefinitionMethodGeneratorFactory(
AotServices.factoriesAndBeans(springFactoriesLoader, beanFactory));
@ -197,12 +197,11 @@ class BeanDefinitionMethodGeneratorFactoryTests {
}
static class TestBeanRegistrationAotProcessorAndFilterBean
extends TestBeanRegistrationAotProcessorBean
implements BeanRegistrationExcludeFilter {
static class TestBeanRegistrationAotProcessorAndNotExcluded
extends TestBeanRegistrationAotProcessorBean {
@Override
public boolean isExcluded(RegisteredBean registeredBean) {
public boolean isBeanExcludedFromAotProcessing() {
return false;
}