Support registration of non-public BeanDefinitionReader via @ImportResource
Prior to this commit, a BeanDefinitionReader registered via @ImportResource was required to be public and have a public constructor that accepts a single BeanDefinitionRegistry. However, the public visibility requirements are not necessary, and the requirements for the constructor's formal parameter list is not documented. To address those issues, this commit removes the public visibility restrictions and documents that a BeanDefinitionReader registered via @ImportResource must declare a constructor that accepts a single BeanDefinitionRegistry. In addition, this commit includes the cause of the instantiation failure in case the registered BeanDefinitionReader cannot be instantiated. Closes gh-34928
This commit is contained in:
@@ -23,6 +23,7 @@ import org.junit.jupiter.api.Test;
|
||||
import org.springframework.aop.support.AopUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.testfixture.beans.TestBean;
|
||||
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
@@ -109,6 +110,13 @@ class ImportResourceTests {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void importResourceWithPrivateReader() {
|
||||
try (AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(ImportWithPrivateReaderConfig.class)) {
|
||||
assertThat(ctx.containsBean("propertiesDeclaredBean")).isTrue();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Configuration
|
||||
@ImportResource("classpath:org/springframework/context/annotation/configuration/ImportXmlConfig-context.xml")
|
||||
@@ -173,4 +181,20 @@ class ImportResourceTests {
|
||||
static class ImportNonXmlResourceConfig {
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
@Configuration
|
||||
@ImportResource(locations = "org/springframework/context/annotation/configuration/ImportNonXmlResourceConfig.properties",
|
||||
reader = PrivatePropertiesBeanDefinitionReader.class)
|
||||
static class ImportWithPrivateReaderConfig {
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
private static class PrivatePropertiesBeanDefinitionReader
|
||||
extends org.springframework.beans.factory.support.PropertiesBeanDefinitionReader {
|
||||
|
||||
PrivatePropertiesBeanDefinitionReader(BeanDefinitionRegistry registry) {
|
||||
super(registry);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user