Skip to content

Commit d98eeef

Browse files
committed
Set FACTORY_BEAN_OBJECT_TYPE as Class in RepositoryConfigurationDelegate.
This is to accommodate spring-projects/spring-framework#30917.
1 parent c05ed09 commit d98eeef

File tree

2 files changed

+25
-3
lines changed

2 files changed

+25
-3
lines changed

Diff for: src/main/java/org/springframework/data/repository/config/RepositoryConfigurationDelegate.java

+20-1
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,10 @@
4747
import org.springframework.core.metrics.ApplicationStartup;
4848
import org.springframework.core.metrics.StartupStep;
4949
import org.springframework.data.repository.core.support.RepositoryFactorySupport;
50+
import org.springframework.data.util.ReflectionUtils;
5051
import org.springframework.lang.Nullable;
5152
import org.springframework.util.Assert;
53+
import org.springframework.util.ClassUtils;
5254
import org.springframework.util.StopWatch;
5355

5456
/**
@@ -183,7 +185,7 @@ public List<BeanComponentDefinition> registerRepositoriesIn(BeanDefinitionRegist
183185

184186
AbstractBeanDefinition beanDefinition = definitionBuilder.getBeanDefinition();
185187

186-
beanDefinition.setAttribute(FACTORY_BEAN_OBJECT_TYPE, configuration.getRepositoryInterface());
188+
beanDefinition.setAttribute(FACTORY_BEAN_OBJECT_TYPE, getRepositoryInterface(configuration));
187189
beanDefinition.setResourceDescription(configuration.getResourceDescription());
188190

189191
String beanName = configurationSource.generateBeanName(beanDefinition);
@@ -307,6 +309,23 @@ private static ApplicationStartup getStartup(BeanDefinitionRegistry registry) {
307309
return ApplicationStartup.DEFAULT;
308310
}
309311

312+
/**
313+
* Returns the repository interface of the given {@link RepositoryConfiguration} as loaded {@link Class}.
314+
*
315+
* @param configuration must not be {@literal null}.
316+
* @return can be {@literal null}.
317+
*/
318+
@Nullable
319+
private Class<?> getRepositoryInterface(RepositoryConfiguration<?> configuration) {
320+
321+
String interfaceName = configuration.getRepositoryInterface();
322+
ClassLoader classLoader = resourceLoader.getClassLoader() == null
323+
? ClassUtils.getDefaultClassLoader()
324+
: resourceLoader.getClassLoader();
325+
326+
return ReflectionUtils.loadIfPresent(interfaceName, classLoader);
327+
}
328+
310329
/**
311330
* Customer {@link ContextAnnotationAutowireCandidateResolver} that also considers all injection points for lazy
312331
* repositories lazy.

Diff for: src/test/java/org/springframework/data/repository/config/RepositoryConfigurationDelegateUnitTests.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class RepositoryConfigurationDelegateUnitTests {
6161

6262
RepositoryConfigurationExtension extension = new DummyConfigurationExtension();
6363

64-
@Test // DATACMNS-892
64+
@Test // DATACMNS-892, #2891
6565
void registersRepositoryBeanNameAsAttribute() {
6666

6767
var environment = new StandardEnvironment();
@@ -76,8 +76,11 @@ void registersRepositoryBeanNameAsAttribute() {
7676
for (var definition : delegate.registerRepositoriesIn(context, extension)) {
7777

7878
var beanDefinition = definition.getBeanDefinition();
79+
var attribute = beanDefinition.getAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE);
7980

80-
assertThat(beanDefinition.getAttribute(FactoryBean.OBJECT_TYPE_ATTRIBUTE).toString()).endsWith("Repository");
81+
assertThat(attribute).isInstanceOfSatisfying(Class.class, it -> {
82+
assertThat(it.getName()).endsWith("Repository");
83+
});
8184
}
8285
}
8386

0 commit comments

Comments
 (0)