From 1467d63f61db4173766e6429f897bfc8bab3dfd7 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 8 Jul 2022 09:34:09 +0200 Subject: [PATCH] Simplify auditing setup Use IsNewAwareAuditingHandler factory method to avoid exposing additional beans. See: #1279 --- .../config/JdbcAuditingRegistrar.java | 42 +------------------ .../r2dbc/config/R2dbcAuditingRegistrar.java | 41 +----------------- 2 files changed, 3 insertions(+), 80 deletions(-) diff --git a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java index 1456b994f..34373832f 100644 --- a/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java +++ b/spring-data-jdbc/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java @@ -17,19 +17,15 @@ package org.springframework.data.jdbc.repository.config; import java.lang.annotation.Annotation; -import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.data.auditing.IsNewAwareAuditingHandler; import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport; import org.springframework.data.auditing.config.AuditingConfiguration; import org.springframework.data.config.ParsingUtils; -import org.springframework.data.mapping.context.PersistentEntities; import org.springframework.data.relational.auditing.RelationalAuditingCallback; -import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -39,6 +35,7 @@ import org.springframework.util.Assert; * @see EnableJdbcAuditing * @author Kazuki Shimizu * @author Jens Schauder + * @author Christoph Strobl */ class JdbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { @@ -69,7 +66,7 @@ class JdbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { @Override protected void postProcess(BeanDefinitionBuilder builder, AuditingConfiguration configuration, BeanDefinitionRegistry registry) { - potentiallyRegisterJdbcPersistentEntities(builder, registry); + builder.setFactoryMethod("from").addConstructorArgReference("jdbcMappingContext"); } @Override @@ -96,39 +93,4 @@ class JdbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { registerInfrastructureBeanWithId(listenerBeanDefinitionBuilder.getBeanDefinition(), RelationalAuditingCallback.class.getName(), registry); } - - static void potentiallyRegisterJdbcPersistentEntities(BeanDefinitionBuilder builder, - BeanDefinitionRegistry registry) { - - String persistentEntitiesBeanName = JdbcAuditingRegistrar.detectPersistentEntitiesBeanName(registry); - - if (persistentEntitiesBeanName == null) { - - persistentEntitiesBeanName = BeanDefinitionReaderUtils.uniqueBeanName("jdbcPersistentEntities", registry); - - // TODO: https://github.com/spring-projects/spring-framework/issues/28728 - BeanDefinitionBuilder definition = BeanDefinitionBuilder.genericBeanDefinition(PersistentEntities.class) // - .setFactoryMethod("of") // - .addConstructorArgReference("jdbcMappingContext"); - - registry.registerBeanDefinition(persistentEntitiesBeanName, definition.getBeanDefinition()); - } - - builder.addConstructorArgReference(persistentEntitiesBeanName); - } - - @Nullable - private static String detectPersistentEntitiesBeanName(BeanDefinitionRegistry registry) { - - if (registry instanceof ListableBeanFactory beanFactory) { - for (String bn : beanFactory.getBeanNamesForType(PersistentEntities.class)) { - if (bn.startsWith("jdbc")) { - return bn; - } - } - } - - return null; - } - } diff --git a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/config/R2dbcAuditingRegistrar.java b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/config/R2dbcAuditingRegistrar.java index ca4eb2c07..b591691bd 100644 --- a/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/config/R2dbcAuditingRegistrar.java +++ b/spring-data-r2dbc/src/main/java/org/springframework/data/r2dbc/config/R2dbcAuditingRegistrar.java @@ -17,19 +17,15 @@ package org.springframework.data.r2dbc.config; import java.lang.annotation.Annotation; -import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.data.auditing.ReactiveIsNewAwareAuditingHandler; import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport; import org.springframework.data.auditing.config.AuditingConfiguration; import org.springframework.data.config.ParsingUtils; -import org.springframework.data.mapping.context.PersistentEntities; import org.springframework.data.r2dbc.mapping.event.ReactiveAuditingEntityCallback; -import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -62,7 +58,7 @@ class R2dbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { @Override protected void postProcess(BeanDefinitionBuilder builder, AuditingConfiguration configuration, BeanDefinitionRegistry registry) { - potentiallyRegisterR2dbcPersistentEntities(builder, registry); + builder.setFactoryMethod("from").addConstructorArgReference("r2dbcMappingContext"); } /* @@ -97,39 +93,4 @@ class R2dbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { registerInfrastructureBeanWithId(listenerBeanDefinitionBuilder.getBeanDefinition(), ReactiveAuditingEntityCallback.class.getName(), registry); } - - static void potentiallyRegisterR2dbcPersistentEntities(BeanDefinitionBuilder builder, - BeanDefinitionRegistry registry) { - - String persistentEntitiesBeanName = R2dbcAuditingRegistrar.detectPersistentEntitiesBeanName(registry); - - if (persistentEntitiesBeanName == null) { - - persistentEntitiesBeanName = BeanDefinitionReaderUtils.uniqueBeanName("r2dbcPersistentEntities", registry); - - // TODO: https://github.com/spring-projects/spring-framework/issues/28728 - BeanDefinitionBuilder definition = BeanDefinitionBuilder.genericBeanDefinition(PersistentEntities.class) // - .setFactoryMethod("of") // - .addConstructorArgReference("r2dbcMappingContext"); - - registry.registerBeanDefinition(persistentEntitiesBeanName, definition.getBeanDefinition()); - } - - builder.addConstructorArgReference(persistentEntitiesBeanName); - } - - @Nullable - private static String detectPersistentEntitiesBeanName(BeanDefinitionRegistry registry) { - - if (registry instanceof ListableBeanFactory beanFactory) { - for (String bn : beanFactory.getBeanNamesForType(PersistentEntities.class)) { - if (bn.startsWith("r2dbc")) { - return bn; - } - } - } - - return null; - } - }