我有一个简单的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运行时它运行,字符串转换为文件并传递给ctor。
当我使用mvn exec:java
运行它时找不到文件,我会遇到各种错误,但是围绕着这个错误:
org.springframework.beans.factory.BeanCreationException:错误 在类路径中定义名称窗口小部件创建bean resource [META-INF / context.xml]:无法解析匹配 构造函数(提示:为简单指定index / type / nam e参数 避免类型歧义的参数)
那么,如何将 classpath 文件(实际上是目录)传递给Spring中的bean构造函数? 我需要目录因为我想扫描它/列出其中的所有文件。
答案 0 :(得分:0)
那么,如何将类路径文件(实际上是目录)传递给bean 春天的构造函数?我需要一个目录,因为我想要扫描 它/列出其中的所有文件。
我不知道这是否可能,但您可以使用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中提到的非文件系统资源相关的警告。