zoukankan      html  css  js  c++  java
  • 自定义个Bean名称生成策略, 解决不同包下同名类问题/AnnotationBeanNameGenerator

    一.写一个类继承AnnotationBeanNameGenerator类

    import org.springframework.beans.factory.config.BeanDefinition;
    import org.springframework.beans.factory.support.BeanDefinitionRegistry;
    import org.springframework.context.annotation.AnnotationBeanNameGenerator;
    
    /**
     * 自定义个BeanName生成策略, 解决不同包下同名类问题
     */
    public class UniqueNameGenerator extends AnnotationBeanNameGenerator {
    
        @Override
        public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) {
            System.out.println("BeanDefinition: "+definition.getBeanClassName());
            String result = "";
            String urlStartStr = "com.example.demo";
            if(definition.getBeanClassName().startsWith(urlStartStr)){
                result = definition.getBeanClassName();
            } else {
                String[] strArr = definition.getBeanClassName().split("\\.");
                result = strArr[strArr.length-1];
                result = result.substring(0, 1).toLowerCase() + result.substring(1);
            }
            return result;
        }
    }

    二.在springboot启动类中配置自定义bean名称生成器,使其生效

    @SpringBootApplication
    @ComponentScan(basePackages = {"com.example.demo"}, nameGenerator = UniqueNameGenerator.class)
    public class DemoApplication {

    public static void main(String[] args) {
    SpringApplication.run(DemoApplication.class, args);
    }

    }

    注:

    @SpringBootApplication=@Configuration+@EnableAutoConfiguration+@ComponentScan

    所以,当@SpringBootApplication@ComponentScan注解共存时,@SpringBootApplication注解的扫描的作用将会失效,所以此时需要将@SpringBootApplication中扫描包放到@ComponentScan

  • 相关阅读:
    java实现冒泡排序
    使用telnet测试指定端口的连通性
    聊聊Java中的异常及处理
    Java工具类——数学相关的类
    谈谈javaSE中的==和equals的联系与区别
    如何在Vim中更改颜色和主题
    配置类为什么要添加@Configuration注解呢?
    你知道Spring是怎么解析配置类的吗?
    读源码,我们可以从第一行读起
    Spring杂谈 | Spring中的AutowireCandidateResolver
  • 原文地址:https://www.cnblogs.com/jadening/p/14020947.html
Copyright © 2011-2022 走看看