繁体   English   中英

Java Spring依赖注入类路径

[英]java spring dependency injection class path

我不明白为什么classpath在我的代码中不起作用。 我正在尝试使用外部文件资源初始化MatFileReader。

<bean id="contents" class="org.apache.commons.io.IOUtils" factory-method="toString">
  <constructor-arg 
value="classpath:data/nps/power_spectrum/input.mat" 
type="java.io.InputStream" />
</bean>
<bean id="matInput" class="com.jmatio.io.MatFileReader">
  <constructor-arg 
name="fileName" 
value="classpath:data/nps/power_spectrum/input.mat" />
</bean>

classpath正在使用第一个bean(id = contents)。 我可以阅读input.mat文件的内容。 但是,在第二个bean中(id = matInput)。 我得到FileNotFoundException 看来编译器无法替换关键字classpath MatFileReader的构造函数将String作为参数。 如果我使用绝对路径而不是classpath ,它将起作用。 但是,我想使用classpath ,如何解决呢?

如果MatFileReader的构造函数将String作为参数,则我不确定是否会保留“ classpath:”。 您只应输入:

<constructor-arg name="fileName" value="data/nps/power_spectrum/input.mat" />

然后,当您尝试初始化文件时,必须进行如下操作:

URL url = this.getClass().getResource(filename)
File file = new File(url.toURI());

要么

InputStream in = this.getClass().getClassLoader()
                                .getResourceAsStream(filename);

最后一种解决方案是将文件名声明为不是字符串,而是声明为资源。 取决于您的需求

您所做的工作正常,并且注射效果良好。 如果我正确理解,那更多是Java问题。 因为您无法使用来初始化文件

File f = new File("classpath:input.mat");

您必须选择我提供的上述解决方案之一。

希望这个帮助

您可以使用ClassPathResource读取类路径上的资源。

<bean id="tagProviderResource" class="org.springframework.core.io.ClassPathResource">
    <constructor-arg value="/htmlcleaner.xml" />
</bean>

<util:property-path id="tagProviderFile" path="tagProviderResource.file" />

<bean id="tagProvider" class="org.htmlcleaner.ConfigFileTagProvider">
    <constructor-arg ref="tagProviderFile" />
</bean>

有关上述代码的更多详细信息,请参见将类路径中的文件注入Bean中

看看为类路径资源注入URL

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM