gpt4 book ai didi

spring - Spring组件扫描中base-package属性中的通配符

转载 作者:行者123 更新时间:2023-12-02 11:36:53 25 4
gpt4 key购买 nike

有人可以解释一下 Spring 配置中 ** 代表什么吗?

<context:component-scan base-package="a.b.**" />

这与

有什么不同
<context:component-scan base-package="a.b" />

我在组件扫描元素的 base-package 属性中找不到任何有关使用通配符/ant 样式路径的信息。

您能否向我指出任何可以解释使用的文档/源代码组件扫描属性中的通配符?我的 google-fu 没用

编辑:我根据接受的答案做了一些更多的实验,现在知道基础包属性的值如何“转换”为资源字符串,这一切都有意义。

因此,我创建了两个 Spring 托管组件

a.b.SpringBean2
a.b.c.d.SpringBean1

SpringBean1使用@Autowired注入(inject)了SpringBean2

所以不仅仅是这个:

<context:component-scan base-package="a.b"/>

还有这个:

<context:component-scan base-package="a.b.**"/>

工作正常,因为 SpringBean2 可以被正确解析为注入(inject)到 SpringBean1 中,但这些也可以工作:

<context:component-scan base-package="a.b.**.**.**"/> <!-- as many .** as you want-->
<context:component-scan base-package="a.b**"/>
<context:component-scan base-package="a.b*"/>

但是,由于未解析的 SpringBean2 类型,这将失败并出现 NoSuchBeanDefinitionException:

<context:component-scan base-package="a.b.*"/>

最佳答案

两者的含义相同,最终像a.b这样的基础包名称会转换为具有这种资源名称的资源查找 - classpath*:/a/b/**/*.class 并且您的第一个基础包名称将属于以下资源类型:classpath*:/a/b/**/**/*.class,两者都会结束做同样的事情,获取 a.b 包名下的所有类文件。

关于spring - Spring组件扫描中base-package属性中的通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12216479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com