Skip to content

Commit 451a3ae

Browse files
committed
Set ApplicationEventPublisher on repository factory if it implements ApplicationEventPublisherAware.
Closes #3424
1 parent c9019b8 commit 451a3ae

File tree

3 files changed

+42
-4
lines changed

3 files changed

+42
-4
lines changed

src/main/java/org/springframework/data/repository/core/support/RepositoryFactoryBeanSupport.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,19 +331,23 @@ public void afterPropertiesSet() {
331331
: QueryMethodValueEvaluationContextAccessor.DEFAULT_CONTEXT_PROVIDER);
332332
this.factory.setBeanClassLoader(classLoader);
333333

334-
if (beanFactory != null) {
334+
if (this.beanFactory != null) {
335335
this.factory.setBeanFactory(beanFactory);
336336
}
337337

338338
if (this.publisher != null) {
339339
this.factory.addRepositoryProxyPostProcessor(new EventPublishingRepositoryProxyPostProcessor(publisher));
340+
341+
if (this.factory instanceof ApplicationEventPublisherAware aware) {
342+
aware.setApplicationEventPublisher(this.publisher);
343+
}
340344
}
341345

342346
if (this.environment != null) {
343347
this.factory.setEnvironment(this.environment);
344348
}
345349

346-
if (repositoryBaseClass != null) {
350+
if (this.repositoryBaseClass != null) {
347351
this.factory.setRepositoryBaseClass(repositoryBaseClass);
348352
}
349353

src/test/java/org/springframework/data/repository/core/support/DummyRepositoryFactory.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
import org.mockito.Mockito;
2626

2727
import org.springframework.beans.factory.BeanFactory;
28+
import org.springframework.context.ApplicationEventPublisher;
29+
import org.springframework.context.ApplicationEventPublisherAware;
2830
import org.springframework.core.metrics.ApplicationStartup;
2931
import org.springframework.core.metrics.StartupStep;
3032
import org.springframework.data.projection.ProjectionFactory;
@@ -46,14 +48,16 @@
4648
* @author Oliver Gierke
4749
* @author Christoph Strobl
4850
*/
49-
public class DummyRepositoryFactory extends RepositoryFactorySupport {
51+
public class DummyRepositoryFactory extends RepositoryFactorySupport implements ApplicationEventPublisherAware {
5052

5153
public final MyRepositoryQuery queryOne = mock(MyRepositoryQuery.class);
5254
public final RepositoryQuery queryTwo = mock(RepositoryQuery.class);
5355
public final QueryLookupStrategy strategy = mock(QueryLookupStrategy.class);
5456

5557
private final ApplicationStartup applicationStartup;
5658

59+
private ApplicationEventPublisher publisher;
60+
5761
@SuppressWarnings("unchecked") private final QuerydslPredicateExecutor<Object> querydsl = mock(
5862
QuerydslPredicateExecutor.class);
5963
private final Object repository;
@@ -97,6 +101,15 @@ protected Optional<QueryLookupStrategy> getQueryLookupStrategy(Key key,
97101
return Optional.of(strategy);
98102
}
99103

104+
public ApplicationEventPublisher getPublisher() {
105+
return publisher;
106+
}
107+
108+
@Override
109+
public void setApplicationEventPublisher(ApplicationEventPublisher publisher) {
110+
this.publisher = publisher;
111+
}
112+
100113
@Override
101114
protected RepositoryFragments getRepositoryFragments(RepositoryMetadata metadata) {
102115

src/test/java/org/springframework/data/repository/core/support/RepositoryFactoryBeanSupportUnitTests.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.jspecify.annotations.NonNull;
2424
import org.jspecify.annotations.Nullable;
2525
import org.junit.jupiter.api.Test;
26+
2627
import org.springframework.data.querydsl.QuerydslPredicateExecutor;
2728
import org.springframework.data.repository.Repository;
2829
import org.springframework.test.util.ReflectionTestUtils;
@@ -32,6 +33,7 @@
3233
*
3334
* @author Oliver Gierke
3435
* @author Thomas Darimont
36+
* @author Mark Paluch
3537
*/
3638
class RepositoryFactoryBeanSupportUnitTests {
3739

@@ -97,7 +99,7 @@ public Object invoke(@NonNull MethodInvocation invocation) {
9799
@Test // DATACMNS-1345
98100
void reportsMappingContextUnavailableForPersistentEntityLookup() {
99101

100-
var bean = new RepositoryFactoryBeanSupport<SampleRepository, Object, Long>(
102+
var bean = new RepositoryFactoryBeanSupport<>(
101103
SampleRepository.class) {
102104

103105
@Override
@@ -112,6 +114,25 @@ protected RepositoryFactorySupport createRepositoryFactory() {
112114
.isThrownBy(() -> bean.getPersistentEntity());
113115
}
114116

117+
@Test // DATACMNS-1345
118+
void setsApplicationEventPublisher() {
119+
120+
var bean = new RepositoryFactoryBeanSupport<>(SampleRepository.class) {
121+
122+
@Override
123+
protected RepositoryFactorySupport createRepositoryFactory() {
124+
return new DummyRepositoryFactory(mock(SampleRepository.class));
125+
}
126+
};
127+
128+
bean.setApplicationEventPublisher(event -> {});
129+
bean.setLazyInit(true);
130+
bean.afterPropertiesSet();
131+
132+
var factory = ReflectionTestUtils.getField(bean, "factory");
133+
assertThat(factory).extracting("publisher").isNotNull();
134+
}
135+
115136
interface SampleRepository extends Repository<Object, Long> {
116137

117138
void someMethod();

0 commit comments

Comments
 (0)