Skip to content

Commit d8718b4

Browse files
Partially revert auditing bean registration changes.
Restoring bean registration while keeping the optional nature of AuditorAware in the Reactive-/AuditingHandler. The changes done previously caused AOT code generation to fail with: org.springframework.aot.generate.UnsupportedTypeValueCodeGenerationException: Code generation does not support org.springframework.beans.factory.config.AutowiredPropertyMarker See: #3177
1 parent c76db4a commit d8718b4

File tree

3 files changed

+16
-48
lines changed

3 files changed

+16
-48
lines changed

src/main/antora/modules/ROOT/pages/auditing.adoc

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,13 @@
33

44
[[auditing.basics]]
55
== Basics
6-
7-
Spring Data provides sophisticated support to transparently keep track of who created or changed an entity and when the change happened.
8-
To benefit from that functionality, you have to equip your entity classes with auditing metadata that can be defined either using annotations or by implementing an interface.
6+
Spring Data provides sophisticated support to transparently keep track of who created or changed an entity and when the change happened.To benefit from that functionality, you have to equip your entity classes with auditing metadata that can be defined either using annotations or by implementing an interface.
97
Additionally, auditing has to be enabled either through Annotation configuration or XML configuration to register the required infrastructure components.
108
Please refer to the store-specific section for configuration samples.
119

1210
[NOTE]
1311
====
1412
Applications that only track creation and modification dates are not required do make their entities implement <<auditing.auditor-aware,`AuditorAware`>>.
15-
If no `AuditorAware` or `DateTimeProvider` bean is configured, `AuditingHandler` will use Spring's autowiring to detect a matching bean if beans of the corresponding type are available in the application context.
1613
====
1714

1815
[[auditing.annotations]]

src/main/java/org/springframework/data/auditing/config/AuditingBeanDefinitionRegistrarSupport.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -116,23 +116,19 @@ protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder(AuditingCon
116116
protected BeanDefinitionBuilder configureDefaultAuditHandlerAttributes(AuditingConfiguration configuration,
117117
BeanDefinitionBuilder builder) {
118118

119+
builder.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
120+
119121
if (StringUtils.hasText(configuration.getAuditorAwareRef())) {
120122
builder.addPropertyValue(AUDITOR_AWARE,
121123
createLazyInitTargetSourceBeanDefinition(configuration.getAuditorAwareRef()));
122124
}
123-
else {
124-
builder.addAutowiredProperty(AUDITOR_AWARE);
125-
}
126125

127126
builder.addPropertyValue(SET_DATES, configuration.isSetDates());
128127
builder.addPropertyValue(MODIFY_ON_CREATE, configuration.isModifyOnCreate());
129128

130129
if (StringUtils.hasText(configuration.getDateTimeProviderRef())) {
131130
builder.addPropertyReference(DATE_TIME_PROVIDER, configuration.getDateTimeProviderRef());
132131
}
133-
else {
134-
builder.addAutowiredProperty(DATE_TIME_PROVIDER);
135-
}
136132

137133
builder.setRole(AbstractBeanDefinition.ROLE_INFRASTRUCTURE);
138134

src/test/java/org/springframework/data/auditing/config/AuditingBeanDefinitionRegistrarSupportUnitTests.java

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -20,23 +20,19 @@
2020
import static org.mockito.Mockito.*;
2121

2222
import java.lang.annotation.Annotation;
23-
import java.util.Optional;
2423

2524
import org.junit.jupiter.api.Test;
2625
import org.junit.jupiter.api.extension.ExtendWith;
2726
import org.mockito.Mock;
2827
import org.mockito.junit.jupiter.MockitoExtension;
2928

30-
import org.springframework.beans.factory.config.AutowiredPropertyMarker;
3129
import org.springframework.beans.factory.config.BeanDefinition;
3230
import org.springframework.beans.factory.support.AbstractBeanDefinition;
3331
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
3432
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
35-
import org.springframework.context.support.GenericApplicationContext;
3633
import org.springframework.core.type.AnnotationMetadata;
3734
import org.springframework.data.auditing.AuditingHandler;
3835
import org.springframework.data.auditing.EnableAuditing;
39-
import org.springframework.data.mapping.context.PersistentEntities;
4036

4137
/**
4238
* Unit tests for {@link AuditingBeanDefinitionRegistrarSupport}.
@@ -46,7 +42,6 @@
4642
* @author Oliver Gierke
4743
* @author Francisco Soler
4844
* @author Jaeyeon Kim
49-
* @author Mark Paluch
5045
*/
5146
@ExtendWith(MockitoExtension.class)
5247
class AuditingBeanDefinitionRegistrarSupportUnitTests {
@@ -82,28 +77,13 @@ void rejectsNullRegistry() {
8277
.isThrownBy(() -> registrar.registerBeanDefinitions(metadata, null));
8378
}
8479

85-
@Test // GH-3177
80+
@Test // DATACMNS-3177
8681
void setsAuditorAwareAndDateTimeProviderIfConfigured() {
8782

88-
AuditingConfiguration configuration = new DummyAuditingBeanDefinitionRegistrarSupport().getConfiguration(null);
89-
90-
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(AuditingHandler.class);
91-
DummyAuditingBeanDefinitionRegistrarSupport registrar = new DummyAuditingBeanDefinitionRegistrarSupport();
92-
93-
BeanDefinitionBuilder result = registrar.configureDefaultAuditHandlerAttributes(configuration, builder);
94-
AbstractBeanDefinition beanDefinition = result.getBeanDefinition();
95-
96-
assertThat(beanDefinition.getPropertyValues().contains("auditorAware")).isTrue();
97-
assertThat(beanDefinition.getPropertyValues().contains("dateTimeProvider")).isTrue();
98-
}
99-
100-
@Test // GH-3177
101-
void doesNotSetAuditorAwareAndDateTimeProviderIfNotConfigured() {
102-
10383
AuditingConfiguration configuration = new AuditingConfiguration() {
10484
@Override
10585
public String getAuditorAwareRef() {
106-
return "";
86+
return "auditorAwareBean";
10787
}
10888

10989
@Override
@@ -113,7 +93,7 @@ public boolean isSetDates() {
11393

11494
@Override
11595
public String getDateTimeProviderRef() {
116-
return "";
96+
return "dateTimeProviderBean";
11797
}
11898

11999
@Override
@@ -128,12 +108,13 @@ public boolean isModifyOnCreate() {
128108
BeanDefinitionBuilder result = registrar.configureDefaultAuditHandlerAttributes(configuration, builder);
129109
AbstractBeanDefinition beanDefinition = result.getBeanDefinition();
130110

131-
assertThat(beanDefinition.getPropertyValues().get("auditorAware")).isEqualTo(AutowiredPropertyMarker.INSTANCE);
132-
assertThat(beanDefinition.getPropertyValues().get("dateTimeProvider")).isEqualTo(AutowiredPropertyMarker.INSTANCE);
111+
assertThat(beanDefinition.getAutowireMode()).isEqualTo(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
112+
assertThat(beanDefinition.getPropertyValues().contains("auditorAware")).isTrue();
113+
assertThat(beanDefinition.getPropertyValues().contains("dateTimeProvider")).isTrue();
133114
}
134115

135-
@Test // GH-3177
136-
void optionalAutowiringShouldConsiderOptionalProperties() {
116+
@Test // DATACMNS-3177
117+
void doesNotSetAuditorAwareAndDateTimeProviderIfNotConfigured() {
137118

138119
AuditingConfiguration configuration = new AuditingConfiguration() {
139120
@Override
@@ -152,24 +133,18 @@ public String getDateTimeProviderRef() {
152133
}
153134

154135
@Override
155-
public boolean isModifyOnCreate() {
156-
return true;
157-
}
136+
public boolean isModifyOnCreate() { return true; }
158137
};
159138

160139
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(AuditingHandler.class);
161-
builder.addConstructorArgValue(PersistentEntities.of());
162140
DummyAuditingBeanDefinitionRegistrarSupport registrar = new DummyAuditingBeanDefinitionRegistrarSupport();
163141

164142
BeanDefinitionBuilder result = registrar.configureDefaultAuditHandlerAttributes(configuration, builder);
143+
AbstractBeanDefinition beanDefinition = result.getBeanDefinition();
165144

166-
GenericApplicationContext context = new GenericApplicationContext();
167-
context.registerBeanDefinition("auditingHandler", result.getBeanDefinition());
168-
context.refresh();
169-
170-
AuditingHandler handler = context.getBean(AuditingHandler.class);
171-
172-
assertThat(handler).extracting("auditorAware").isEqualTo(Optional.empty());
145+
assertThat(beanDefinition.getAutowireMode()).isEqualTo(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
146+
assertThat(beanDefinition.getPropertyValues().contains("auditorAware")).isFalse();
147+
assertThat(beanDefinition.getPropertyValues().contains("dateTimeProvider")).isFalse();
173148
}
174149

175150
static class SampleConfig {}

0 commit comments

Comments
 (0)