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