springboot注入默认使用className作为注入的key,如果两个className一样,无法注入
   
  添加配置CoreConfiguration 
  package com.statcore; 
  import com.xmeport.statcore.util.AnnotationBeanNameGenerator;   
import org.mybatis.spring.annotation.MapperScan;    
import org.springframework.context.annotation.ComponentScan;    
import org.springframework.context.annotation.Configuration; 
  @Configuration   
@ComponentScan(nameGenerator = AnnotationBeanNameGenerator.class)    
@MapperScan(value = "com.xmeport.statcore.mapper" ,nameGenerator = AnnotationBeanNameGenerator.class)    
public class CoreConfiguration {    
}
   
  创建AnnotationBeanNameGenerator类
  package com.statcore.util; 
  import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition;   
import org.springframework.beans.factory.config.BeanDefinition;    
import org.springframework.beans.factory.support.BeanDefinitionRegistry;    
import org.springframework.beans.factory.support.BeanNameGenerator;    
import org.springframework.core.annotation.AnnotationAttributes;    
import org.springframework.core.type.AnnotationMetadata;    
import org.springframework.util.StringUtils; 
  import java.util.Map;   
import java.util.Set; 
  public class AnnotationBeanNameGenerator implements BeanNameGenerator {    
    private static final String COMPONENT_ANNOTATION_CLASSNAME = "org.springframework.stereotype.Component"; 
      @Override   
    public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {    
        if (definition instanceof AnnotatedBeanDefinition) {    
            String beanName = determineBeanNameFromAnnotation((AnnotatedBeanDefinition) definition);    
            if (StringUtils.hasText(beanName)) {    
                // Explicit bean name found.    
                return beanName;    
            }    
        }    
        return definition.getBeanClassName();    
    } 
      /**   
     * Derive a bean name from one of the annotations on the class.    
     *    
     * @param annotatedDef the annotation-aware bean definition    
     * @return the bean name, or {@code null} if none is found    
     */    
    protected String determineBeanNameFromAnnotation(AnnotatedBeanDefinition annotatedDef) {    
        AnnotationMetadata amd = annotatedDef.getMetadata();    
        Set<String> types = amd.getAnnotationTypes();    
        String beanName = null;    
        for (String type : types) {    
            AnnotationAttributes attributes = AnnotationAttributes.fromMap(amd.getAnnotationAttributes(type, false));    
            if (isStereotypeWithNameValue(type, amd.getMetaAnnotationTypes(type), attributes)) {    
                Object value = attributes.get("value");    
                if (value instanceof String) {    
                    String strVal = (String) value;    
                    if (StringUtils.hasLength(strVal)) {    
                        if (beanName != null && !strVal.equals(beanName)) {    
                            throw new IllegalStateException("Stereotype annotations suggest inconsistent " +    
                                    "component names: '" + beanName + "' versus '" + strVal + "'");    
                        }    
                        beanName = strVal;    
                    }    
                }    
            }    
        }    
        return beanName;    
    } 
      /**   
     * Check whether the given annotation is a stereotype that is allowed    
     * to suggest a component name through its annotation {@code value()}.    
     *    
     * @param annotationType      the name of the annotation class to check    
     * @param metaAnnotationTypes the names of meta-annotations on the given annotation    
     * @param attributes          the map of attributes for the given annotation    
     * @return whether the annotation qualifies as a stereotype with component name    
     */    
    protected boolean isStereotypeWithNameValue(String annotationType,    
                                                Set<String> metaAnnotationTypes, Map<String, Object> attributes) { 
          boolean isStereotype = annotationType.equals(COMPONENT_ANNOTATION_CLASSNAME) ||   
                (metaAnnotationTypes != null && metaAnnotationTypes.contains(COMPONENT_ANNOTATION_CLASSNAME)) ||    
                annotationType.equals("javax.annotation.ManagedBean") ||    
                annotationType.equals("javax.inject.Named"); 
          return (isStereotype && attributes != null && attributes.containsKey("value"));   
    } 
  }