Skip to content

Commit fe98964

Browse files
committed
DATAJDBC-216 - Polishing.
Simplified code by using constructor injection plus Lombok. Removed superfluous handling of BeforeSave events with null entity. Original pull request: spring-projects#71.
1 parent 0c863eb commit fe98964

File tree

3 files changed

+31
-49
lines changed

3 files changed

+31
-49
lines changed

src/main/java/org/springframework/data/jdbc/domain/support/JdbcAuditingEventListener.java

Lines changed: 21 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -15,52 +15,30 @@
1515
*/
1616
package org.springframework.data.jdbc.domain.support;
1717

18-
import org.springframework.beans.factory.ObjectFactory;
18+
import lombok.RequiredArgsConstructor;
19+
1920
import org.springframework.context.ApplicationListener;
2021
import org.springframework.data.auditing.AuditingHandler;
2122
import org.springframework.data.jdbc.mapping.event.BeforeSaveEvent;
2223
import org.springframework.data.jdbc.mapping.model.JdbcMappingContext;
2324
import org.springframework.data.jdbc.mapping.model.JdbcPersistentEntityInformation;
2425
import org.springframework.data.jdbc.repository.config.EnableJdbcAuditing;
25-
import org.springframework.lang.Nullable;
26-
import org.springframework.util.Assert;
2726

2827
/**
2928
* Spring JDBC event listener to capture auditing information on persisting and updating entities.
3029
* <p>
3130
* An instance of this class gets registered when you apply {@link EnableJdbcAuditing} to your Spring config.
3231
*
3332
* @author Kazuki Shimizu
33+
* @author Jens Schauder
3434
* @see EnableJdbcAuditing
3535
* @since 1.0
3636
*/
37+
@RequiredArgsConstructor
3738
public class JdbcAuditingEventListener implements ApplicationListener<BeforeSaveEvent> {
3839

39-
@Nullable private AuditingHandler handler;
40-
private JdbcMappingContext context;
41-
42-
/**
43-
* Configures the {@link AuditingHandler} to be used to set the current auditor on the domain types touched.
44-
*
45-
* @param auditingHandler must not be {@literal null}.
46-
*/
47-
public void setAuditingHandler(ObjectFactory<AuditingHandler> auditingHandler) {
48-
49-
Assert.notNull(auditingHandler, "AuditingHandler must not be null!");
50-
51-
this.handler = auditingHandler.getObject();
52-
}
53-
54-
/**
55-
* Configures a {@link JdbcMappingContext} that use for judging whether new object or not.
56-
* @param context must not be {@literal null}
57-
*/
58-
public void setJdbcMappingContext(JdbcMappingContext context) {
59-
60-
Assert.notNull(context, "JdbcMappingContext must not be null!");
61-
62-
this.context = context;
63-
}
40+
private final AuditingHandler handler;
41+
private final JdbcMappingContext context;
6442

6543
/**
6644
* {@inheritDoc}
@@ -70,19 +48,22 @@ public void setJdbcMappingContext(JdbcMappingContext context) {
7048
@Override
7149
public void onApplicationEvent(BeforeSaveEvent event) {
7250

73-
if (handler != null) {
51+
Object entity = event.getEntity();
52+
53+
@SuppressWarnings("unchecked")
54+
Class<Object> entityType = event.getChange().getEntityType();
55+
JdbcPersistentEntityInformation<Object, ?> entityInformation = context
56+
.getRequiredPersistentEntityInformation(entityType);
57+
58+
invokeHandler(entity, entityInformation);
59+
}
60+
61+
private <T> void invokeHandler(T entity, JdbcPersistentEntityInformation<T, ?> entityInformation) {
7462

75-
event.getOptionalEntity().ifPresent(entity -> {
76-
@SuppressWarnings("unchecked")
77-
Class<Object> entityType = event.getChange().getEntityType();
78-
JdbcPersistentEntityInformation<Object, ?> entityInformation =
79-
context.getRequiredPersistentEntityInformation(entityType);
80-
if (entityInformation.isNew(entity)) {
81-
handler.markCreated(entity);
82-
} else {
83-
handler.markModified(entity);
84-
}
85-
});
63+
if (entityInformation.isNew(entity)) {
64+
handler.markCreated(entity);
65+
} else {
66+
handler.markModified(entity);
8667
}
8768
}
8869
}

src/main/java/org/springframework/data/jdbc/repository/config/JdbcAuditingRegistrar.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,12 @@
1717

1818
import java.lang.annotation.Annotation;
1919

20-
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
2120
import org.springframework.beans.factory.config.BeanDefinition;
2221
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
2322
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
2423
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
2524
import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport;
2625
import org.springframework.data.auditing.config.AuditingConfiguration;
27-
import org.springframework.data.config.ParsingUtils;
2826
import org.springframework.data.jdbc.domain.support.JdbcAuditingEventListener;
2927

3028
/**
@@ -33,10 +31,14 @@
3331
*
3432
* @see EnableJdbcAuditing
3533
* @author Kazuki Shimizu
34+
* @author Jens Schauder
3635
* @since 1.0
3736
*/
3837
class JdbcAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport {
3938

39+
private static final String AUDITING_HANDLER_BEAN_NAME = "jdbcAuditingHandler";
40+
private static final String JDBC_MAPPING_CONTEXT_BEAN_NAME = "jdbcMappingContext";
41+
4042
/**
4143
* {@inheritDoc}
4244
*
@@ -56,7 +58,7 @@ protected Class<? extends Annotation> getAnnotation() {
5658
*/
5759
@Override
5860
protected String getAuditingHandlerBeanName() {
59-
return "jdbcAuditingHandler";
61+
return AUDITING_HANDLER_BEAN_NAME;
6062
}
6163

6264
/*
@@ -67,7 +69,7 @@ protected String getAuditingHandlerBeanName() {
6769
protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder(AuditingConfiguration configuration) {
6870

6971
BeanDefinitionBuilder builder = super.getAuditHandlerBeanDefinitionBuilder(configuration);
70-
return builder.addConstructorArgReference("jdbcMappingContext");
72+
return builder.addConstructorArgReference(JDBC_MAPPING_CONTEXT_BEAN_NAME);
7173
}
7274

7375
/**
@@ -81,10 +83,10 @@ protected void registerAuditListenerBeanDefinition(BeanDefinition auditingHandle
8183
BeanDefinitionRegistry registry) {
8284

8385
Class<?> listenerClass = JdbcAuditingEventListener.class;
84-
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(listenerClass);
85-
builder.addPropertyValue("auditingHandler",
86-
ParsingUtils.getObjectFactoryBeanDefinition(getAuditingHandlerBeanName(), null));
87-
builder.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE);
86+
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(listenerClass) //
87+
.addConstructorArgReference(AUDITING_HANDLER_BEAN_NAME) //
88+
.addConstructorArgReference(JDBC_MAPPING_CONTEXT_BEAN_NAME);
89+
8890
registerInfrastructureBeanWithId(builder.getRawBeanDefinition(), listenerClass.getName(), registry);
8991
}
9092

src/test/java/org/springframework/data/jdbc/repository/config/EnableJdbcAuditingHsqlIntegrationTests.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ private <T, R extends CrudRepository<T, Long>> Consumer<Consumer<R>> configureRe
183183
};
184184
}
185185

186-
187186
private void sleepMillis(int timeout) {
188187

189188
try {

0 commit comments

Comments
 (0)