gpt4 book ai didi

java - 将类路径目录/文件 Autowiring 到 Bean

转载 作者:行者123 更新时间:2023-12-02 09:43:35 24 4
gpt4 key购买 nike

我有一个简单的 Spring bean

public class Widget {   
public Widget(File rootDir) { ... }
}

在我的应用程序上下文 XML 中,我想创建一个 Widget 实例:

<bean id="widget" class="com.example.Widget">
<constructor-arg type="java.io.File" value="classpath:/someDir"/>
</bean>

当我从 IDE 运行时,它可以工作,字符串被转换为文件并传递给构造函数。

当我使用 mvn exec:java 运行它时,找不到文件,我收到各种错误,但围绕着:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name widget defined in class path resource [META-INF/context.xml]: Could not resolve matching constructor (hint: specify index/type/nam e arguments for simple parameters to avoid type ambiguities)

<小时/>

那么,如何将类路径文件(实际上是目录)传递给Spring中的bean构造函数?我需要一个目录,因为我想扫描它/列出其中的所有文件。

最佳答案

So, how to I pass a classpath File (actually, directory) to a bean constructor in Spring? I need a directory becasue then I want to scan it / list all files inside it.

我不知道这是否可能,但您可以使用 Spring 获取类路径上与模式匹配的所有资源。请参阅PathMatchingResourcePatternResolver 。请参阅有关使用 Ant-style wildcards 的文档.

在你的构造函数中尝试这个:

import org.springframework.core.io.Resource;
...
public Widget(Resource[] resources) { ... }

在您的 XML 中,类似如下(更改 Ant 模式以匹配您的用例):

<bean id="widget" class="com.example.Widget">
<constructor-arg>
<list>
<value>classpath:/someDir/*.foo</value>
</list>
</constructor-arg>
</bean>

在使用此功能之前,我建议您查看 PathMatchingResourcePatternResolver Javadocs 中提到的与非文件系统资源相关的注意事项。

关于java - 将类路径目录/文件 Autowiring 到 Bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24649402/

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