Skip to content

Commit 0237760

Browse files
committed
DATACMNS-1215 - Fixed repository lookup for proxy domain classes.
We now consistently use the user class for repository (metadata) lookup in Repositories.
1 parent e2bac30 commit 0237760

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

src/main/java/org/springframework/data/repository/support/Repositories.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,9 @@ public boolean hasRepositoryFor(Class<?> domainClass) {
122122

123123
Assert.notNull(domainClass, DOMAIN_TYPE_MUST_NOT_BE_NULL);
124124

125-
return repositoryFactoryInfos.containsKey(domainClass);
125+
Class<?> userClass = ClassUtils.getUserClass(domainClass);
126+
127+
return repositoryFactoryInfos.containsKey(userClass);
126128
}
127129

128130
/**
@@ -135,7 +137,9 @@ public Optional<Object> getRepositoryFor(Class<?> domainClass) {
135137

136138
Assert.notNull(domainClass, DOMAIN_TYPE_MUST_NOT_BE_NULL);
137139

138-
Optional<String> repositoryBeanName = Optional.ofNullable(repositoryBeanNames.get(domainClass));
140+
Class<?> userClass = ClassUtils.getUserClass(domainClass);
141+
Optional<String> repositoryBeanName = Optional.ofNullable(repositoryBeanNames.get(userClass));
142+
139143
return beanFactory.flatMap(it -> repositoryBeanName.map(it::getBean));
140144
}
141145

src/test/java/org/springframework/data/repository/support/RepositoriesUnitTests.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.junit.Test;
3030
import org.junit.runner.RunWith;
3131
import org.mockito.junit.MockitoJUnitRunner;
32+
import org.springframework.aop.framework.ProxyFactory;
3233
import org.springframework.beans.factory.support.AbstractBeanDefinition;
3334
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
3435
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
@@ -140,6 +141,23 @@ public void exposesRepositoryFactoryInformationForRepository() {
140141
.hasValueSatisfying(it -> assertThat(it.getRepositoryInterface()).isEqualTo(PersonRepository.class));
141142
}
142143

144+
@Test // DATACMNS-1215
145+
public void exposesRepositoryForProxyType() {
146+
147+
ProxyFactory factory = new ProxyFactory();
148+
factory.setTarget(new Person());
149+
factory.setProxyTargetClass(true);
150+
151+
Object proxy = factory.getProxy();
152+
153+
assertThat(ClassUtils.isCglibProxy(proxy)).isTrue();
154+
155+
Repositories repositories = new Repositories(context);
156+
157+
assertThat(repositories.hasRepositoryFor(proxy.getClass())).isTrue();
158+
assertThat(repositories.getRepositoryFor(proxy.getClass())).isNotEmpty();
159+
}
160+
143161
class Person {}
144162

145163
class Address {}

0 commit comments

Comments
 (0)