Skip to content

Commit 038eae6

Browse files
ghgh415263mp911de
authored andcommitted
Allow autowiring of DateTimeProvider for AuditingHandler.
Use autowired properties for AuditorAware and DateTimeProvider when explicit references are not provided Closes: #3177 Original pull request: #3385 Signed-off-by: JaeYeon Kim <[email protected]>
1 parent bd0d729 commit 038eae6

File tree

2 files changed

+77
-6
lines changed

2 files changed

+77
-6
lines changed

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

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,13 @@
2121

2222
import org.springframework.aop.framework.ProxyFactoryBean;
2323
import org.springframework.aop.target.LazyInitTargetSource;
24-
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
2524
import org.springframework.beans.factory.config.BeanDefinition;
2625
import org.springframework.beans.factory.support.AbstractBeanDefinition;
2726
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
2827
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
2928
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
3029
import org.springframework.core.type.AnnotationMetadata;
3130
import org.springframework.data.auditing.AuditingHandler;
32-
import org.springframework.data.auditing.CurrentDateTimeProvider;
3331
import org.springframework.util.Assert;
3432
import org.springframework.util.StringUtils;
3533

@@ -42,6 +40,7 @@
4240
* @author Thomas Darimont
4341
* @author Oliver Gierke
4442
* @author Francisco Soler
43+
* @author Jaeyeon Kim
4544
*/
4645
public abstract class AuditingBeanDefinitionRegistrarSupport implements ImportBeanDefinitionRegistrar {
4746

@@ -117,20 +116,18 @@ protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder(AuditingCon
117116
protected BeanDefinitionBuilder configureDefaultAuditHandlerAttributes(AuditingConfiguration configuration,
118117
BeanDefinitionBuilder builder) {
119118

119+
builder.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
120+
120121
if (StringUtils.hasText(configuration.getAuditorAwareRef())) {
121122
builder.addPropertyValue(AUDITOR_AWARE,
122123
createLazyInitTargetSourceBeanDefinition(configuration.getAuditorAwareRef()));
123-
} else {
124-
builder.setAutowireMode(AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE);
125124
}
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());
132-
} else {
133-
builder.addPropertyValue(DATE_TIME_PROVIDER, CurrentDateTimeProvider.INSTANCE);
134131
}
135132

136133
builder.setRole(AbstractBeanDefinition.ROLE_INFRASTRUCTURE);

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

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,11 @@
2727
import org.mockito.junit.jupiter.MockitoExtension;
2828

2929
import org.springframework.beans.factory.config.BeanDefinition;
30+
import org.springframework.beans.factory.support.AbstractBeanDefinition;
31+
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
3032
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
3133
import org.springframework.core.type.AnnotationMetadata;
34+
import org.springframework.data.auditing.AuditingHandler;
3235
import org.springframework.data.auditing.EnableAuditing;
3336

3437
/**
@@ -38,6 +41,7 @@
3841
* @author Thomas Darimont
3942
* @author Oliver Gierke
4043
* @author Francisco Soler
44+
* @author Jaeyeon Kim
4145
*/
4246
@ExtendWith(MockitoExtension.class)
4347
class AuditingBeanDefinitionRegistrarSupportUnitTests {
@@ -73,6 +77,76 @@ void rejectsNullRegistry() {
7377
.isThrownBy(() -> registrar.registerBeanDefinitions(metadata, null));
7478
}
7579

80+
@Test // DATACMNS-3177
81+
void setsAuditorAwareAndDateTimeProviderIfConfigured() {
82+
83+
AuditingConfiguration configuration = new AuditingConfiguration() {
84+
@Override
85+
public String getAuditorAwareRef() {
86+
return "auditorAwareBean";
87+
}
88+
89+
@Override
90+
public boolean isSetDates() {
91+
return true;
92+
}
93+
94+
@Override
95+
public String getDateTimeProviderRef() {
96+
return "dateTimeProviderBean";
97+
}
98+
99+
@Override
100+
public boolean isModifyOnCreate() {
101+
return true;
102+
}
103+
};
104+
105+
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(AuditingHandler.class);
106+
DummyAuditingBeanDefinitionRegistrarSupport registrar = new DummyAuditingBeanDefinitionRegistrarSupport();
107+
108+
BeanDefinitionBuilder result = registrar.configureDefaultAuditHandlerAttributes(configuration, builder);
109+
AbstractBeanDefinition beanDefinition = result.getBeanDefinition();
110+
111+
assertThat(beanDefinition.getAutowireMode()).isEqualTo(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
112+
assertThat(beanDefinition.getPropertyValues().contains("auditorAware")).isTrue();
113+
assertThat(beanDefinition.getPropertyValues().contains("dateTimeProvider")).isTrue();
114+
}
115+
116+
@Test // DATACMNS-3177
117+
void doesNotSetAuditorAwareAndDateTimeProviderIfNotConfigured() {
118+
119+
AuditingConfiguration configuration = new AuditingConfiguration() {
120+
@Override
121+
public String getAuditorAwareRef() {
122+
return "";
123+
}
124+
125+
@Override
126+
public boolean isSetDates() {
127+
return true;
128+
}
129+
130+
@Override
131+
public String getDateTimeProviderRef() {
132+
return "";
133+
}
134+
135+
@Override
136+
public boolean isModifyOnCreate() { return true; }
137+
};
138+
139+
BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(AuditingHandler.class);
140+
DummyAuditingBeanDefinitionRegistrarSupport registrar = new DummyAuditingBeanDefinitionRegistrarSupport();
141+
142+
BeanDefinitionBuilder result = registrar.configureDefaultAuditHandlerAttributes(configuration, builder);
143+
AbstractBeanDefinition beanDefinition = result.getBeanDefinition();
144+
145+
assertThat(beanDefinition.getAutowireMode()).isEqualTo(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
146+
assertThat(beanDefinition.getPropertyValues().contains("auditorAware")).isFalse();
147+
assertThat(beanDefinition.getPropertyValues().contains("dateTimeProvider")).isFalse();
148+
}
149+
76150
static class SampleConfig {}
77151

78152
static class DummyAuditingBeanDefinitionRegistrarSupport extends AuditingBeanDefinitionRegistrarSupport {

0 commit comments

Comments
 (0)