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