Spring:如何在bean构建期间获取应用程序的目录路径?

时间:2014-06-17 14:00:42

标签: spring-mvc

我有一个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);
}
迈克尔,谢谢!!!

2 个答案:

答案 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文件的根目录下)