diff --git a/src/main/java/org/springframework/data/repository/support/Repositories.java b/src/main/java/org/springframework/data/repository/support/Repositories.java index c4a2d17ed..efd8f7f42 100644 --- a/src/main/java/org/springframework/data/repository/support/Repositories.java +++ b/src/main/java/org/springframework/data/repository/support/Repositories.java @@ -122,7 +122,9 @@ public class Repositories implements Iterable> { Assert.notNull(domainClass, DOMAIN_TYPE_MUST_NOT_BE_NULL); - return repositoryFactoryInfos.containsKey(domainClass); + Class userClass = ClassUtils.getUserClass(domainClass); + + return repositoryFactoryInfos.containsKey(userClass); } /** @@ -135,7 +137,9 @@ public class Repositories implements Iterable> { Assert.notNull(domainClass, DOMAIN_TYPE_MUST_NOT_BE_NULL); - Optional repositoryBeanName = Optional.ofNullable(repositoryBeanNames.get(domainClass)); + Class userClass = ClassUtils.getUserClass(domainClass); + Optional repositoryBeanName = Optional.ofNullable(repositoryBeanNames.get(userClass)); + return beanFactory.flatMap(it -> repositoryBeanName.map(it::getBean)); } diff --git a/src/test/java/org/springframework/data/repository/support/RepositoriesUnitTests.java b/src/test/java/org/springframework/data/repository/support/RepositoriesUnitTests.java index bc708727c..1e2ccf338 100755 --- a/src/test/java/org/springframework/data/repository/support/RepositoriesUnitTests.java +++ b/src/test/java/org/springframework/data/repository/support/RepositoriesUnitTests.java @@ -29,6 +29,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.aop.framework.ProxyFactory; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.DefaultListableBeanFactory; @@ -140,6 +141,23 @@ public class RepositoriesUnitTests { .hasValueSatisfying(it -> assertThat(it.getRepositoryInterface()).isEqualTo(PersonRepository.class)); } + @Test // DATACMNS-1215 + public void exposesRepositoryForProxyType() { + + ProxyFactory factory = new ProxyFactory(); + factory.setTarget(new Person()); + factory.setProxyTargetClass(true); + + Object proxy = factory.getProxy(); + + assertThat(ClassUtils.isCglibProxy(proxy)).isTrue(); + + Repositories repositories = new Repositories(context); + + assertThat(repositories.hasRepositoryFor(proxy.getClass())).isTrue(); + assertThat(repositories.getRepositoryFor(proxy.getClass())).isNotEmpty(); + } + class Person {} class Address {}