Make DynamicPropertyRegistrarBeanInitializer public

In order to allow third parties (for example, Spring Boot) to ensure
that a DynamicPropertyRegistrarBeanInitializer has been registered in
an ApplicationContext which has not been customized by the
DynamicPropertiesContextCustomizer, this commit converts
DynamicPropertyRegistrarBeanInitializer to a public API for use in such
special use cases.

Closes gh-33593
This commit is contained in:
Sam Brannen 2024-09-26 13:01:57 +02:00
parent b4bfb8952c
commit e55fe9077f
2 changed files with 12 additions and 9 deletions

View File

@ -50,10 +50,6 @@ import org.springframework.util.ReflectionUtils;
*/
class DynamicPropertiesContextCustomizer implements ContextCustomizer {
private static final String DYNAMIC_PROPERTY_REGISTRAR_BEAN_INITIALIZER_BEAN_NAME =
DynamicPropertiesContextCustomizer.class.getName() + ".dynamicPropertyRegistrarBeanInitializer";
private final Set<Method> methods;
@ -70,11 +66,10 @@ class DynamicPropertiesContextCustomizer implements ContextCustomizer {
throw new IllegalStateException("BeanFactory must be a BeanDefinitionRegistry");
}
if (!beanDefinitionRegistry.containsBeanDefinition(DYNAMIC_PROPERTY_REGISTRAR_BEAN_INITIALIZER_BEAN_NAME)) {
if (!beanDefinitionRegistry.containsBeanDefinition(DynamicPropertyRegistrarBeanInitializer.BEAN_NAME)) {
BeanDefinition beanDefinition = new RootBeanDefinition(DynamicPropertyRegistrarBeanInitializer.class);
beanDefinition.setRole(BeanDefinition.ROLE_INFRASTRUCTURE);
beanDefinitionRegistry.registerBeanDefinition(
DYNAMIC_PROPERTY_REGISTRAR_BEAN_INITIALIZER_BEAN_NAME, beanDefinition);
beanDefinitionRegistry.registerBeanDefinition(DynamicPropertyRegistrarBeanInitializer.BEAN_NAME, beanDefinition);
}
if (!this.methods.isEmpty()) {

View File

@ -30,16 +30,24 @@ import org.springframework.test.context.DynamicPropertyRegistrar;
import org.springframework.test.context.DynamicPropertyRegistry;
/**
* Internal component which eagerly initializes {@link DynamicPropertyRegistrar}
* {@link BeanFactoryInitializer} that eagerly initializes {@link DynamicPropertyRegistrar}
* beans.
*
* <p>Primarily intended for internal use within the Spring TestContext Framework.
*
* @author Sam Brannen
* @since 6.2
*/
class DynamicPropertyRegistrarBeanInitializer implements BeanFactoryInitializer<ListableBeanFactory>, EnvironmentAware {
public class DynamicPropertyRegistrarBeanInitializer implements BeanFactoryInitializer<ListableBeanFactory>, EnvironmentAware {
private static final Log logger = LogFactory.getLog(DynamicPropertyRegistrarBeanInitializer.class);
/**
* The bean name of the internally managed {@code DynamicPropertyRegistrarBeanInitializer}.
*/
static final String BEAN_NAME =
"org.springframework.test.context.support.internalDynamicPropertyRegistrarBeanInitializer";
@Nullable
private ConfigurableEnvironment environment;