DATAJDBC-216 - Polishing.
Simplified code by using constructor injection plus Lombok. Removed superfluous handling of BeforeSave events with null entity. Original pull request: #71.
This commit is contained in:
@@ -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<BeforeSaveEvent> {
|
||||
|
||||
@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> 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<BeforeSave
|
||||
@Override
|
||||
public void onApplicationEvent(BeforeSaveEvent event) {
|
||||
|
||||
if (handler != null) {
|
||||
Object entity = event.getEntity();
|
||||
|
||||
event.getOptionalEntity().ifPresent(entity -> {
|
||||
@SuppressWarnings("unchecked")
|
||||
Class<Object> entityType = event.getChange().getEntityType();
|
||||
JdbcPersistentEntityInformation<Object, ?> entityInformation =
|
||||
context.getRequiredPersistentEntityInformation(entityType);
|
||||
if (entityInformation.isNew(entity)) {
|
||||
handler.markCreated(entity);
|
||||
} else {
|
||||
handler.markModified(entity);
|
||||
}
|
||||
});
|
||||
@SuppressWarnings("unchecked")
|
||||
Class<Object> entityType = event.getChange().getEntityType();
|
||||
JdbcPersistentEntityInformation<Object, ?> entityInformation = context
|
||||
.getRequiredPersistentEntityInformation(entityType);
|
||||
|
||||
invokeHandler(entity, entityInformation);
|
||||
}
|
||||
|
||||
private <T> void invokeHandler(T entity, JdbcPersistentEntityInformation<T, ?> entityInformation) {
|
||||
|
||||
if (entityInformation.isNew(entity)) {
|
||||
handler.markCreated(entity);
|
||||
} else {
|
||||
handler.markModified(entity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user