diff --git a/src/main/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessor.java b/src/main/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessor.java index ea04ef8d2..419a062e6 100644 --- a/src/main/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessor.java +++ b/src/main/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessor.java @@ -21,7 +21,6 @@ import java.lang.reflect.Method; import java.util.Collection; import java.util.Collections; import java.util.Map; -import java.util.stream.Stream; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; @@ -90,7 +89,7 @@ public class EventPublishingRepositoryProxyPostProcessor implements RepositoryPr Object result = invocation.proceed(); - if (!Stream.of("save", "saveAll").anyMatch(it -> invocation.getMethod().getName().equals(it))) { + if (!invocation.getMethod().getName().startsWith("save")) { return result; } diff --git a/src/test/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessorUnitTests.java b/src/test/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessorUnitTests.java index a5c8ec142..1f82bd544 100644 --- a/src/test/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessorUnitTests.java +++ b/src/test/java/org/springframework/data/repository/core/support/EventPublishingRepositoryProxyPostProcessorUnitTests.java @@ -22,6 +22,7 @@ import static org.mockito.Mockito.*; import lombok.Getter; import lombok.Value; +import java.lang.reflect.Method; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -187,6 +188,23 @@ public class EventPublishingRepositoryProxyPostProcessorUnitTests { } } + @Test // DATACMNS-1113 + public void invokesEventsForMethodsThatStartsWithSave() throws Throwable { + + Method method = SampleRepository.class.getMethod("saveAndFlush", MultipleEvents.class); + doReturn(method).when(invocation).getMethod(); + + SomeEvent event = new SomeEvent(); + MultipleEvents sample = MultipleEvents.of(Collections.singletonList(event)); + doReturn(new Object[] { sample }).when(invocation).getArguments(); + + EventPublishingMethodInterceptor// + .of(EventPublishingMethod.of(MultipleEvents.class), publisher)// + .invoke(invocation); + + verify(publisher).publishEvent(event); + } + @Value(staticConstructor = "of") static class MultipleEvents { @Getter(onMethod = @__(@DomainEvents)) Collection events; @@ -202,5 +220,8 @@ public class EventPublishingRepositoryProxyPostProcessorUnitTests { UUID id = UUID.randomUUID(); } - interface SampleRepository extends CrudRepository {} + interface SampleRepository extends CrudRepository { + + MultipleEvents saveAndFlush(MultipleEvents events); + } }