Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaSpring依赖注入类路径_Java_Spring_Dependency Injection - Fatal编程技术网

JavaSpring依赖注入类路径

JavaSpring依赖注入类路径,java,spring,dependency-injection,Java,Spring,Dependency Injection,我不明白为什么类路径在我的代码中不起作用。我正在尝试使用外部文件资源初始化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" />

我不明白为什么类路径在我的代码中不起作用。我正在尝试使用外部文件资源初始化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的构造函数将字符串作为参数。如果我使用绝对路径而不是
类路径
,它会工作。但是,我想使用
类路径
,如何修复它?

如果MatFileReader的构造函数使用字符串作为参数,我不确定是否会保留“classpath:”。 你只应把:

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

最后一个解决方案是将文件名声明为资源而不是字符串。 取决于您需要什么

你所做的是工作,注射是好的。如果我理解正确的话,这更像是一个Java问题。因为您无法使用初始化文件

File f = new File("classpath:input.mat");
你必须从我前面给出的解决方案中选择一个

希望这个帮助可以用来阅读classpath上的资源

<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 id是不是
id=“matInput”
或者
id=matInput
?对不起,它是“matInput”。但是,仍然有FileNotFoundException您是否尝试将
value=“classpath:data/nps/power\u spectrum/input.mat”替换为
value=“classpath:/data/nps/power\u spectrum/input.mat”
?或者使用
index=0
替代
name='fileName'
?我已经尝试了两种方法,但仍然不起作用。让我困惑的是,第一个id=“contents”的bean使用的是相同的URI。我可以读取.mat文件的内容。但是,MatFileReader将文件名作为字符串。请看我的答案并试一试。之前我初始化MatFileReader就像您提到的那样。它起作用了。但是,我试图理解Spring依赖注入,我想在调用bean(id=“matInput”)时自动注入依赖。我编辑我的解决方案,我认为这更像是Java问题,而不是Spring问题
File f = new File("classpath:input.mat");
<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>