将类路径目录/ File自动装配到Bean

时间:2014-07-09 09:00:52

标签: java spring maven autowired

我有一个简单的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构造函数? 我需要目录因为我想扫描它/列出其中的所有文件。

1 个答案:

答案 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中提到的非文件系统资源相关的警告。