|
28 | 28 | import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
|
29 | 29 | import org.springframework.beans.factory.support.RegisteredBean;
|
30 | 30 | import org.springframework.context.annotation.AnnotationConfigApplicationContext;
|
| 31 | +import org.springframework.context.annotation.ComponentScan.Filter; |
| 32 | +import org.springframework.context.annotation.FilterType; |
31 | 33 | import org.springframework.core.DecoratingProxy;
|
32 |
| -import org.springframework.data.aot.sample.ConfigWithCustomImplementation; |
33 |
| -import org.springframework.data.aot.sample.ConfigWithCustomRepositoryBaseClass; |
34 |
| -import org.springframework.data.aot.sample.ConfigWithFragments; |
35 |
| -import org.springframework.data.aot.sample.ConfigWithQueryMethods; |
| 34 | +import org.springframework.data.aot.sample.*; |
36 | 35 | import org.springframework.data.aot.sample.ConfigWithQueryMethods.ProjectionInterface;
|
37 |
| -import org.springframework.data.aot.sample.ConfigWithQuerydslPredicateExecutor; |
38 | 36 | import org.springframework.data.aot.sample.ConfigWithQuerydslPredicateExecutor.Person;
|
39 |
| -import org.springframework.data.aot.sample.ConfigWithSimpleCrudRepository; |
40 |
| -import org.springframework.data.aot.sample.ConfigWithTransactionManagerPresent; |
41 |
| -import org.springframework.data.aot.sample.ConfigWithTransactionManagerPresentAndAtComponentAnnotatedRepository; |
42 |
| -import org.springframework.data.aot.sample.QConfigWithQuerydslPredicateExecutor_Person; |
43 |
| -import org.springframework.data.aot.sample.ReactiveConfig; |
| 37 | +import org.springframework.data.domain.AbstractAggregateRoot; |
| 38 | +import org.springframework.data.domain.AfterDomainEventPublication; |
| 39 | +import org.springframework.data.domain.DomainEvents; |
44 | 40 | import org.springframework.data.domain.Page;
|
45 | 41 | import org.springframework.data.repository.PagingAndSortingRepository;
|
46 | 42 | import org.springframework.data.repository.Repository;
|
| 43 | +import org.springframework.data.repository.aot.RepositoryRegistrationAotProcessorIntegrationTests.EventPublicationConfiguration.Sample; |
| 44 | +import org.springframework.data.repository.aot.RepositoryRegistrationAotProcessorIntegrationTests.EventPublicationConfiguration.SampleRepository; |
| 45 | +import org.springframework.data.repository.config.EnableRepositories; |
47 | 46 | import org.springframework.data.repository.config.RepositoryRegistrationAotContribution;
|
48 | 47 | import org.springframework.data.repository.config.RepositoryRegistrationAotProcessor;
|
49 | 48 | import org.springframework.data.repository.reactive.ReactiveSortingRepository;
|
@@ -292,6 +291,30 @@ void registersQTypeIfPresent() {
|
292 | 291 | });
|
293 | 292 | }
|
294 | 293 |
|
| 294 | + @Test // GH-2939 |
| 295 | + void registersReflectionForDomainPublicationAnnotations() { |
| 296 | + |
| 297 | + RepositoryRegistrationAotContribution contribution = computeAotConfiguration(EventPublicationConfiguration.class) |
| 298 | + .forRepository(SampleRepository.class); |
| 299 | + |
| 300 | + assertThatContribution(contribution).codeContributionSatisfies(it -> { |
| 301 | + it.contributesReflectionFor(Sample.class.getDeclaredMethod("publication")); |
| 302 | + it.contributesReflectionFor(Sample.class.getDeclaredMethod("cleanup")); |
| 303 | + }); |
| 304 | + } |
| 305 | + |
| 306 | + @Test // GH-2939 |
| 307 | + void registersReflectionForInheritedDomainPublicationAnnotations() { |
| 308 | + |
| 309 | + RepositoryRegistrationAotContribution contribution = computeAotConfiguration( |
| 310 | + InheritedEventPublicationConfiguration.class) |
| 311 | + .forRepository(InheritedEventPublicationConfiguration.SampleRepository.class); |
| 312 | + |
| 313 | + assertThatContribution(contribution).codeContributionSatisfies(it -> { |
| 314 | + it.contributesReflectionFor(AbstractAggregateRoot.class); |
| 315 | + }); |
| 316 | + } |
| 317 | + |
295 | 318 | RepositoryRegistrationAotContributionBuilder computeAotConfiguration(Class<?> configuration) {
|
296 | 319 | return computeAotConfiguration(configuration, new AnnotationConfigApplicationContext());
|
297 | 320 | }
|
@@ -333,4 +356,31 @@ RepositoryRegistrationAotContributionBuilder computeAotConfiguration(Class<?> co
|
333 | 356 | interface RepositoryRegistrationAotContributionBuilder {
|
334 | 357 | RepositoryRegistrationAotContribution forRepository(Class<?> repositoryInterface);
|
335 | 358 | }
|
| 359 | + |
| 360 | + @EnableRepositories(includeFilters = { @Filter(type = FilterType.ASSIGNABLE_TYPE, value = SampleRepository.class) }, |
| 361 | + considerNestedRepositories = true) |
| 362 | + public class EventPublicationConfiguration { |
| 363 | + |
| 364 | + static class Sample { |
| 365 | + |
| 366 | + @DomainEvents |
| 367 | + void publication() {} |
| 368 | + |
| 369 | + @AfterDomainEventPublication |
| 370 | + void cleanup() {} |
| 371 | + } |
| 372 | + |
| 373 | + interface SampleRepository extends Repository<Sample, Object> {} |
| 374 | + } |
| 375 | + |
| 376 | + @EnableRepositories( |
| 377 | + includeFilters = { @Filter(type = FilterType.ASSIGNABLE_TYPE, |
| 378 | + value = InheritedEventPublicationConfiguration.SampleRepository.class) }, |
| 379 | + considerNestedRepositories = true) |
| 380 | + public class InheritedEventPublicationConfiguration { |
| 381 | + |
| 382 | + static class Sample extends AbstractAggregateRoot<Sample> {} |
| 383 | + |
| 384 | + interface SampleRepository extends Repository<Sample, Object> {} |
| 385 | + } |
336 | 386 | }
|
0 commit comments