Simplify auditing setup.

Use IsNewAwareAuditingHandler factory method to avoid exposing additional beans.

See: #2497
This commit is contained in:
Christoph Strobl
2022-07-11 14:02:50 +02:00
parent 5821272112
commit 36764e5f1a

View File

@@ -21,12 +21,10 @@ import static org.springframework.data.jpa.repository.config.BeanDefinitionNames
import java.lang.annotation.Annotation;
import org.springframework.beans.factory.BeanDefinitionStoreException;
import org.springframework.beans.factory.ListableBeanFactory;
import org.springframework.beans.factory.aspectj.AnnotationBeanConfigurerAspect;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.parsing.BeanComponentDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
@@ -36,9 +34,6 @@ import org.springframework.data.auditing.config.AuditingConfiguration;
import org.springframework.data.config.ParsingUtils;
import org.springframework.data.jpa.domain.support.AuditingBeanFactoryPostProcessor;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.data.mapping.context.PersistentEntities;
import org.springframework.data.repository.config.PersistentEntitiesFactoryBean;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
@@ -94,38 +89,9 @@ class JpaAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
protected void postProcess(BeanDefinitionBuilder builder, AuditingConfiguration configuration,
BeanDefinitionRegistry registry) {
String persistentEntitiesBeanName = detectPersistentEntitiesBeanName(registry);
if (persistentEntitiesBeanName == null) {
persistentEntitiesBeanName = BeanDefinitionReaderUtils.uniqueBeanName("jpaPersistentEntities", registry);
// TODO: https://github.com/spring-projects/spring-framework/issues/28728
BeanDefinitionBuilder definition = BeanDefinitionBuilder.genericBeanDefinition(PersistentEntities.class) //
.setFactoryMethod("of") //
.addConstructorArgReference(JPA_MAPPING_CONTEXT_BEAN_NAME);
registry.registerBeanDefinition(persistentEntitiesBeanName, definition.getBeanDefinition());
}
builder.addConstructorArgReference(persistentEntitiesBeanName);
builder.setFactoryMethod("from").addConstructorArgReference(JPA_MAPPING_CONTEXT_BEAN_NAME);
}
@Nullable
private static String detectPersistentEntitiesBeanName(BeanDefinitionRegistry registry) {
if (registry instanceof ListableBeanFactory beanFactory) {
for (String bn : beanFactory.getBeanNamesForType(PersistentEntities.class)) {
if (bn.startsWith("jpa")) {
return bn;
}
}
}
return null;
}
/**
* @param registry, the {@link BeanDefinitionRegistry} to be used to register the
* {@link AnnotationBeanConfigurerAspect}.