diff --git a/src/main/java/org/springframework/data/repository/config/RepositoryBeanNameGenerator.java b/src/main/java/org/springframework/data/repository/config/RepositoryBeanNameGenerator.java index 667adcc20..e1faec39a 100644 --- a/src/main/java/org/springframework/data/repository/config/RepositoryBeanNameGenerator.java +++ b/src/main/java/org/springframework/data/repository/config/RepositoryBeanNameGenerator.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 the original author or authors. + * Copyright 2012-2017 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -51,14 +51,17 @@ public class RepositoryBeanNameGenerator implements BeanNameGenerator, BeanClass */ public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) { - AnnotatedBeanDefinition beanDefinition = new AnnotatedGenericBeanDefinition(getRepositoryInterfaceFrom(definition)); + AnnotatedBeanDefinition beanDefinition = definition instanceof AnnotatedBeanDefinition // + ? (AnnotatedBeanDefinition) definition // + : new AnnotatedGenericBeanDefinition(getRepositoryInterfaceFrom(definition)); + return DELEGATE.generateBeanName(beanDefinition, registry); } /** - * Returns the type configured for the {@code repositoryInterface} property of the given bean definition. Uses a - * potential {@link Class} being configured as is or tries to load a class with the given value's {@link #toString()} - * representation. + * Returns the type configured for the {@code repositoryInterface} constructor argument of the given bean definition. + * Uses a potential {@link Class} being configured as is or tries to load a class with the given value's + * {@link #toString()} representation. * * @param beanDefinition * @return diff --git a/src/test/java/org/springframework/data/repository/config/RepositoryBeanNameGeneratorUnitTests.java b/src/test/java/org/springframework/data/repository/config/RepositoryBeanNameGeneratorUnitTests.java index 10ae062e2..697d57579 100644 --- a/src/test/java/org/springframework/data/repository/config/RepositoryBeanNameGeneratorUnitTests.java +++ b/src/test/java/org/springframework/data/repository/config/RepositoryBeanNameGeneratorUnitTests.java @@ -18,15 +18,22 @@ package org.springframework.data.repository.config; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; +import java.io.IOException; + import javax.inject.Named; import org.junit.Before; import org.junit.Test; +import org.springframework.beans.factory.annotation.AnnotatedGenericBeanDefinition; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.beans.factory.support.BeanNameGenerator; import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.context.annotation.ScannedGenericBeanDefinition; +import org.springframework.core.type.classreading.MetadataReader; +import org.springframework.core.type.classreading.MetadataReaderFactory; +import org.springframework.core.type.classreading.SimpleMetadataReaderFactory; import org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport; /** @@ -36,6 +43,8 @@ import org.springframework.data.repository.core.support.RepositoryFactoryBeanSup */ public class RepositoryBeanNameGeneratorUnitTests { + static final String SAMPLE_IMPLEMENTATION_BEAN_NAME = "repositoryBeanNameGeneratorUnitTests.SomeImplementation"; + BeanNameGenerator generator; BeanDefinitionRegistry registry; @@ -59,6 +68,25 @@ public class RepositoryBeanNameGeneratorUnitTests { assertThat(generator.generateBeanName(getBeanDefinitionFor(AnnotatedInterface.class), registry), is("specialName")); } + @Test // DATACMNS-1115 + public void usesClassNameOfScannedBeanDefinition() throws IOException { + + MetadataReaderFactory factory = new SimpleMetadataReaderFactory(); + MetadataReader reader = factory.getMetadataReader(SomeImplementation.class.getName()); + + BeanDefinition definition = new ScannedGenericBeanDefinition(reader); + + assertThat(generator.generateBeanName(definition, registry), is(SAMPLE_IMPLEMENTATION_BEAN_NAME)); + } + + @Test // DATACMNS-1115 + public void usesClassNameOfAnnotatedBeanDefinition() { + + BeanDefinition definition = new AnnotatedGenericBeanDefinition(SomeImplementation.class); + + assertThat(generator.generateBeanName(definition, registry), is(SAMPLE_IMPLEMENTATION_BEAN_NAME)); + } + private BeanDefinition getBeanDefinitionFor(Class repositoryInterface) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(RepositoryFactoryBeanSupport.class); @@ -66,12 +94,10 @@ public class RepositoryBeanNameGeneratorUnitTests { return builder.getBeanDefinition(); } - interface PlainInterface { - - } + interface PlainInterface {} @Named("specialName") - interface AnnotatedInterface { + interface AnnotatedInterface {} - } + class SomeImplementation {} }