diff --git a/src/main/java/org/springframework/data/jpa/repository/config/JpaAuditingRegistrar.java b/src/main/java/org/springframework/data/jpa/repository/config/JpaAuditingRegistrar.java index 1254b728c..5fbcb3a8a 100644 --- a/src/main/java/org/springframework/data/jpa/repository/config/JpaAuditingRegistrar.java +++ b/src/main/java/org/springframework/data/jpa/repository/config/JpaAuditingRegistrar.java @@ -116,7 +116,7 @@ class JpaAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { */ private void registerBeanConfigurerAspectIfNecessary(BeanDefinitionRegistry registry) { - if (registry.containsBeanDefinition(BEAN_CONFIGURER_ASPECT_CLASS_NAME)) { + if (registry.containsBeanDefinition(BEAN_CONFIGURER_ASPECT_BEAN_NAME)) { return; } diff --git a/src/test/java/org/springframework/data/jpa/repository/config/JpaAuditingRegistrarUnitTests.java b/src/test/java/org/springframework/data/jpa/repository/config/JpaAuditingRegistrarUnitTests.java index 07e7356a8..f567c4aa2 100644 --- a/src/test/java/org/springframework/data/jpa/repository/config/JpaAuditingRegistrarUnitTests.java +++ b/src/test/java/org/springframework/data/jpa/repository/config/JpaAuditingRegistrarUnitTests.java @@ -15,12 +15,18 @@ */ package org.springframework.data.jpa.repository.config; +import static org.mockito.ArgumentMatchers.*; +import static org.mockito.Mockito.*; + import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.core.type.AnnotationMetadata; +import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.core.type.classreading.SimpleMetadataReaderFactory; +import org.springframework.data.jpa.domain.support.AuditingBeanFactoryPostProcessor; /** * Unit tests for {@link JpaAuditingRegistrar}. @@ -44,4 +50,27 @@ public class JpaAuditingRegistrarUnitTests { public void rejectsNullBeanDefinitionRegistry() { registrar.registerBeanDefinitions(metadata, null); } + + @Test // DATAJPA-1448 + public void doesNotRegisterBeanConfigurerTwice() throws Exception { + + SimpleMetadataReaderFactory factory = new SimpleMetadataReaderFactory(); + MetadataReader reader = factory.getMetadataReader(Sample.class.getName()); + AnnotationMetadata annotationMetadata = reader.getAnnotationMetadata(); + + // Given a bean already present + String beanName = AuditingBeanFactoryPostProcessor.BEAN_CONFIGURER_ASPECT_BEAN_NAME; + when(registry.containsBeanDefinition(beanName)).thenReturn(true); + + // When invoking configuration + registrar.registerBeanDefinitions(annotationMetadata, registry); + + // Then the bean is not registered again + verify(registry, times(0)).registerBeanDefinition(eq(beanName), any()); + + registrar.registerBeanDefinitions(annotationMetadata, registry); + } + + @EnableJpaAuditing + static class Sample {} }