From fe98964d7266b961484f8466f9d54e06f3dc8f21 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Fri, 18 May 2018 07:48:40 +0200 Subject: [PATCH] DATAJDBC-216 - Polishing. Simplified code by using constructor injection plus Lombok. Removed superfluous handling of BeforeSave events with null entity. Original pull request: #71. --- .../support/JdbcAuditingEventListener.java | 61 +++++++------------ .../config/JdbcAuditingRegistrar.java | 18 +++--- ...nableJdbcAuditingHsqlIntegrationTests.java | 1 - 3 files changed, 31 insertions(+), 49 deletions(-) diff --git a/src/main/java/org/springframework/data/jdbc/domain/support/JdbcAuditingEventListener.java b/src/main/java/org/springframework/data/jdbc/domain/support/JdbcAuditingEventListener.java index 8de09cd65..f9eab54dd 100644 --- a/src/main/java/org/springframework/data/jdbc/domain/support/JdbcAuditingEventListener.java +++ b/src/main/java/org/springframework/data/jdbc/domain/support/JdbcAuditingEventListener.java @@ -15,15 +15,14 @@ */ package org.springframework.data.jdbc.domain.support; -import org.springframework.beans.factory.ObjectFactory; +import lombok.RequiredArgsConstructor; + import org.springframework.context.ApplicationListener; import org.springframework.data.auditing.AuditingHandler; import org.springframework.data.jdbc.mapping.event.BeforeSaveEvent; import org.springframework.data.jdbc.mapping.model.JdbcMappingContext; import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntityInformation; import org.springframework.data.jdbc.repository.config.EnableJdbcAuditing; -import org.springframework.lang.Nullable; -import org.springframework.util.Assert; /** * Spring JDBC event listener to capture auditing information on persisting and updating entities. @@ -31,36 +30,15 @@ import org.springframework.util.Assert; * An instance of this class gets registered when you apply {@link EnableJdbcAuditing} to your Spring config. * * @author Kazuki Shimizu + * @author Jens Schauder * @see EnableJdbcAuditing * @since 1.0 */ +@RequiredArgsConstructor public class JdbcAuditingEventListener implements ApplicationListener { - @Nullable private AuditingHandler handler; - private JdbcMappingContext context; - - /** - * Configures the {@link AuditingHandler} to be used to set the current auditor on the domain types touched. - * - * @param auditingHandler must not be {@literal null}. - */ - public void setAuditingHandler(ObjectFactory auditingHandler) { - - Assert.notNull(auditingHandler, "AuditingHandler must not be null!"); - - this.handler = auditingHandler.getObject(); - } - - /** - * Configures a {@link JdbcMappingContext} that use for judging whether new object or not. - * @param context must not be {@literal null} - */ - public void setJdbcMappingContext(JdbcMappingContext context) { - - Assert.notNull(context, "JdbcMappingContext must not be null!"); - - this.context = context; - } + private final AuditingHandler handler; + private final JdbcMappingContext context; /** * {@inheritDoc} @@ -70,19 +48,22 @@ public class JdbcAuditingEventListener implements ApplicationListener entityType = event.getChange().getEntityType(); + JdbcPersistentEntityInformation entityInformation = context + .getRequiredPersistentEntityInformation(entityType); + + invokeHandler(entity, entityInformation); + } + + private void invokeHandler(T entity, JdbcPersistentEntityInformation entityInformation) { - event.getOptionalEntity().ifPresent(entity -> { - @SuppressWarnings("unchecked") - Class entityType = event.getChange().getEntityType(); - JdbcPersistentEntityInformation entityInformation = - context.getRequiredPersistentEntityInformation(entityType); - if (entityInformation.isNew(entity)) { - handler.markCreated(entity); - } else { - handler.markModified(entity); - } - }); + if (entityInformation.isNew(entity)) { + handler.markCreated(entity); + } else { + handler.markModified(entity); } } } diff --git a/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java b/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java index d40566a70..12eaf4594 100644 --- a/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java +++ b/src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java @@ -17,14 +17,12 @@ package org.springframework.data.jdbc.repository.config; import java.lang.annotation.Annotation; -import org.springframework.beans.factory.config.AutowireCapableBeanFactory; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport; import org.springframework.data.auditing.config.AuditingConfiguration; -import org.springframework.data.config.ParsingUtils; import org.springframework.data.jdbc.domain.support.JdbcAuditingEventListener; /** @@ -33,10 +31,14 @@ import org.springframework.data.jdbc.domain.support.JdbcAuditingEventListener; * * @see EnableJdbcAuditing * @author Kazuki Shimizu + * @author Jens Schauder * @since 1.0 */ class JdbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { + private static final String AUDITING_HANDLER_BEAN_NAME = "jdbcAuditingHandler"; + private static final String JDBC_MAPPING_CONTEXT_BEAN_NAME = "jdbcMappingContext"; + /** * {@inheritDoc} * @@ -56,7 +58,7 @@ class JdbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { */ @Override protected String getAuditingHandlerBeanName() { - return "jdbcAuditingHandler"; + return AUDITING_HANDLER_BEAN_NAME; } /* @@ -67,7 +69,7 @@ class JdbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder(AuditingConfiguration configuration) { BeanDefinitionBuilder builder = super.getAuditHandlerBeanDefinitionBuilder(configuration); - return builder.addConstructorArgReference("jdbcMappingContext"); + return builder.addConstructorArgReference(JDBC_MAPPING_CONTEXT_BEAN_NAME); } /** @@ -81,10 +83,10 @@ class JdbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { BeanDefinitionRegistry registry) { Class listenerClass = JdbcAuditingEventListener.class; - BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(listenerClass); - builder.addPropertyValue("auditingHandler", - ParsingUtils.getObjectFactoryBeanDefinition(getAuditingHandlerBeanName(), null)); - builder.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(listenerClass) // + .addConstructorArgReference(AUDITING_HANDLER_BEAN_NAME) // + .addConstructorArgReference(JDBC_MAPPING_CONTEXT_BEAN_NAME); + registerInfrastructureBeanWithId(builder.getRawBeanDefinition(), listenerClass.getName(), registry); } diff --git a/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcAuditingHsqlIntegrationTests.java b/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcAuditingHsqlIntegrationTests.java index 8eb9df7b1..317f76756 100644 --- a/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcAuditingHsqlIntegrationTests.java +++ b/src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcAuditingHsqlIntegrationTests.java @@ -183,7 +183,6 @@ public class EnableJdbcAuditingHsqlIntegrationTests { }; } - private void sleepMillis(int timeout) { try {