我有一个bean如下:
<bean id="myBean" class="MyBeanClass">
<constructor-arg value="\WEB-INF\myfile.dat"/>
</bean>
在bean的构造函数中,我需要构建文件的完整路径。要做到这一点,我必须首先找到应用程序的根路径。
谢谢和问候。
更新
根据Michael-O的建议,这是我的解决方案(这么简单)。
Spring bean:
<bean id="myBean" class="MyBeanClass">
<constructor-arg value="/myfile.dat"/> <!--under WEB-INF/classes-->
</bean>
爪哇:
public MyBeanClass(String path) throws Exception {
ClassPathResource file = new ClassPathResource(path);
lookup = new LookupService(file.getFile().getPath(), LookupService.GEOIP_MEMORY_CACHE);
}
迈克尔,谢谢!!!
答案 0 :(得分:3)
在你的bean中使用Spring的Resource
类,spring将为你完成剩下的工作。
看到@ curious1的编辑后,他的答案有了更好的解决方案。请不要使用它。选择这个:
beans.xml
:
<!-- START: Improvement 2 -->
<context:annotation-config />
<bean id="service" class="LookupService">
<constructor-arg value="classpath:/myfile.dat"/> <!--under WEB-INF/classes-->
<constructor-arg>
<util:constant static-field="LookupService.GEOIP_MEMORY_CACHE"/>
</constructor-arg>
</bean>
<!-- END: Improvement 2 -->
<!-- Spring autowires here -->
<bean id="myBean" class="MyBeanClass" />
<!-- START: Improvement 1 -->
<bean id="myBean" class="MyBeanClass" />
<constructor-arg value="classpath:/myfile.dat"/> <!--under WEB-INF/classes-->
</bean>
<!-- END: Improvement 1 -->
爪哇:
public MyBeanClass(Resource path) throws Exception {
lookup = new LookupService(path.getInputStream(), LookupService.GEOIP_MEMORY_CACHE);
}
这与源无关,不依赖文件和是Spring方式。
编辑2:重新思考我的代码,它可能会更好:
public class MyBeanClass {
@Autowired
LookupService service;
}
并在LookupService
。
beans.xml
答案 1 :(得分:0)
也许你应该考虑使用:
getClass().getClassLoader().getResourceAsStream()
内部构造函数。这将使用您的类路径,因此您将看到&#34; WEB-INF \ myfile.dat&#34;。接下来想的是使用资源目录将所有资源放在一个目录中(默认:在WAR文件的根目录下)