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

  • 相关阅读:
    数组
    原生获取 键盘 keycode 鼠标 键码
    javascript 拖拽
    简单的鼠标拖拽
    vue中格式化时间戳
    使用koa+angular+mysql 完成了一个企业站
    koa2+mysql5+angularjs1 搭建前后端全栈项目
    javascript利用闭包实现迭代器轮询数组中的元素
    AngularJS 1.x版本 学习教程
    改变,从羡慕别人开始
  • 原文地址:https://www.cnblogs.com/jadening/p/14020947.html
Copyright © 2011-2022 走看看