diff --git a/src/main/java/org/springframework/data/auditing/config/AuditingBeanDefinitionRegistrarSupport.java b/src/main/java/org/springframework/data/auditing/config/AuditingBeanDefinitionRegistrarSupport.java index 2e6ef0b8ae..a8572dad72 100644 --- a/src/main/java/org/springframework/data/auditing/config/AuditingBeanDefinitionRegistrarSupport.java +++ b/src/main/java/org/springframework/data/auditing/config/AuditingBeanDefinitionRegistrarSupport.java @@ -21,7 +21,6 @@ import org.springframework.aop.framework.ProxyFactoryBean; import org.springframework.aop.target.LazyInitTargetSource; -import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; @@ -29,7 +28,6 @@ import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.core.type.AnnotationMetadata; import org.springframework.data.auditing.AuditingHandler; -import org.springframework.data.auditing.CurrentDateTimeProvider; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -42,6 +40,7 @@ * @author Thomas Darimont * @author Oliver Gierke * @author Francisco Soler + * @author Jaeyeon Kim */ public abstract class AuditingBeanDefinitionRegistrarSupport implements ImportBeanDefinitionRegistrar { @@ -117,11 +116,11 @@ protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder(AuditingCon protected BeanDefinitionBuilder configureDefaultAuditHandlerAttributes(AuditingConfiguration configuration, BeanDefinitionBuilder builder) { + builder.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE); + if (StringUtils.hasText(configuration.getAuditorAwareRef())) { builder.addPropertyValue(AUDITOR_AWARE, createLazyInitTargetSourceBeanDefinition(configuration.getAuditorAwareRef())); - } else { - builder.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE); } builder.addPropertyValue(SET_DATES, configuration.isSetDates()); @@ -129,8 +128,6 @@ protected BeanDefinitionBuilder configureDefaultAuditHandlerAttributes(AuditingC if (StringUtils.hasText(configuration.getDateTimeProviderRef())) { builder.addPropertyReference(DATE_TIME_PROVIDER, configuration.getDateTimeProviderRef()); - } else { - builder.addPropertyValue(DATE_TIME_PROVIDER, CurrentDateTimeProvider.INSTANCE); } builder.setRole(AbstractBeanDefinition.ROLE_INFRASTRUCTURE); diff --git a/src/test/java/org/springframework/data/auditing/config/AuditingBeanDefinitionRegistrarSupportUnitTests.java b/src/test/java/org/springframework/data/auditing/config/AuditingBeanDefinitionRegistrarSupportUnitTests.java index dd359bc4f7..00180d8e31 100755 --- a/src/test/java/org/springframework/data/auditing/config/AuditingBeanDefinitionRegistrarSupportUnitTests.java +++ b/src/test/java/org/springframework/data/auditing/config/AuditingBeanDefinitionRegistrarSupportUnitTests.java @@ -27,8 +27,11 @@ import org.mockito.junit.jupiter.MockitoExtension; import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.support.AbstractBeanDefinition; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.core.type.AnnotationMetadata; +import org.springframework.data.auditing.AuditingHandler; import org.springframework.data.auditing.EnableAuditing; /** @@ -38,6 +41,7 @@ * @author Thomas Darimont * @author Oliver Gierke * @author Francisco Soler + * @author Jaeyeon Kim */ @ExtendWith(MockitoExtension.class) class AuditingBeanDefinitionRegistrarSupportUnitTests { @@ -73,6 +77,76 @@ void rejectsNullRegistry() { .isThrownBy(() -> registrar.registerBeanDefinitions(metadata, null)); } + @Test // DATACMNS-3177 + void setsAuditorAwareAndDateTimeProviderIfConfigured() { + + AuditingConfiguration configuration = new AuditingConfiguration() { + @Override + public String getAuditorAwareRef() { + return "auditorAwareBean"; + } + + @Override + public boolean isSetDates() { + return true; + } + + @Override + public String getDateTimeProviderRef() { + return "dateTimeProviderBean"; + } + + @Override + public boolean isModifyOnCreate() { + return true; + } + }; + + BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(AuditingHandler.class); + DummyAuditingBeanDefinitionRegistrarSupport registrar = new DummyAuditingBeanDefinitionRegistrarSupport(); + + BeanDefinitionBuilder result = registrar.configureDefaultAuditHandlerAttributes(configuration, builder); + AbstractBeanDefinition beanDefinition = result.getBeanDefinition(); + + assertThat(beanDefinition.getAutowireMode()).isEqualTo(AbstractBeanDefinition.AUTOWIRE_BY_TYPE); + assertThat(beanDefinition.getPropertyValues().contains("auditorAware")).isTrue(); + assertThat(beanDefinition.getPropertyValues().contains("dateTimeProvider")).isTrue(); + } + + @Test // DATACMNS-3177 + void doesNotSetAuditorAwareAndDateTimeProviderIfNotConfigured() { + + AuditingConfiguration configuration = new AuditingConfiguration() { + @Override + public String getAuditorAwareRef() { + return ""; + } + + @Override + public boolean isSetDates() { + return true; + } + + @Override + public String getDateTimeProviderRef() { + return ""; + } + + @Override + public boolean isModifyOnCreate() { return true; } + }; + + BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(AuditingHandler.class); + DummyAuditingBeanDefinitionRegistrarSupport registrar = new DummyAuditingBeanDefinitionRegistrarSupport(); + + BeanDefinitionBuilder result = registrar.configureDefaultAuditHandlerAttributes(configuration, builder); + AbstractBeanDefinition beanDefinition = result.getBeanDefinition(); + + assertThat(beanDefinition.getAutowireMode()).isEqualTo(AbstractBeanDefinition.AUTOWIRE_BY_TYPE); + assertThat(beanDefinition.getPropertyValues().contains("auditorAware")).isFalse(); + assertThat(beanDefinition.getPropertyValues().contains("dateTimeProvider")).isFalse(); + } + static class SampleConfig {} static class DummyAuditingBeanDefinitionRegistrarSupport extends AuditingBeanDefinitionRegistrarSupport {