美文网首页
@ComponentScan(basePackages = {}

@ComponentScan(basePackages = {}

作者: 南岩飞雪 | 来源:发表于2019-06-06 16:29 被阅读0次

    问题

    项目中使用了@ComponentScan注解,但是idea中 basePackages 指定的包路径一直报红,看了下basePackages是个数组,于是乎好奇起来,basePackages = {}是填String数组还是填用逗号隔开的String呢?

    @ComponentScan(basePackages = {"com.aaa.aaa,com.bbb.bbb"}
    

    放码过来

    Spring 启动执行代码

    图片.png
    org.springframework.context.annotation.ComponentScanAnnotationParser#parse
    
            Set<String> basePackages = new LinkedHashSet<>();
            String[] basePackagesArray = componentScan.getStringArray("basePackages");
            for (String pkg : basePackagesArray) {
                String[] tokenized = StringUtils.tokenizeToStringArray(this.environment.resolvePlaceholders(pkg),
                        ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS);
                Collections.addAll(basePackages, tokenized);
            }
    

    强行翻译:
    在单个String字符串中,多个上下文配置路径之间的 这些字符",; \t\n"中的任意一个 都会被认为是分隔符

    ConfigurableApplicationContext.CONFIG_LOCATION_DELIMITERS
    
        /**
         * Any number of these characters are considered delimiters between
         * multiple context config paths in a single String value.
         * @see org.springframework.context.support.AbstractXmlApplicationContext#setConfigLocation
         * @see org.springframework.web.context.ContextLoader#CONFIG_LOCATION_PARAM
         * @see org.springframework.web.servlet.FrameworkServlet#setContextConfigLocation
         */
        String CONFIG_LOCATION_DELIMITERS = ",; \t\n";
    

    结论

    @ComponentScan(basePackages = {})填String数组 或者 用逗号隔开的String 都可以;为了idea显示兼容一点,我还是该成了 String数组

    参考

    @ComponentScan源码分析

    相关文章

      网友评论

          本文标题:@ComponentScan(basePackages = {}

          本文链接:https://www.haomeiwen.com/subject/hbcuxctx.html