使用Sping当中的Resource来获取Web项目资源路径

以前好像使用过,但是很久没用了,结果给忘记了。最近在项目当中因为自己

定义了一个xml文件,测试的时候无所谓,结果当要发布的时候竟然发现无法方

便的获取自己配制的这个文件的相对路径 ,晕。。

但是记得当时解决过这个问题,就是想不起来,在网上查了资料结果就不是写

的一知半解就是写的很乱根本就没有写的明白点的,因自己受过苦,希望给与

那些还在用spring框架但是因无法方便的使用相对路径的人方便。

package test.org.spring.resource;

import java.io.IOException;

import junit.framework.TestCase;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.Resource;

public class ResourceBeanTest extends TestCase {


public void testResource() throws IOException{

ApplicationContext context=new FileSystemXmlApplicationContext("OperationFile/ResourceTestFile.xml");

ResourceBean d=(ResourceBean)context.getBean("resourceBean");

assertNotNull(d);

Resource r=d.getResource();
System.out.println(r.getURL().getPath());
}
}

测试文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>

<bean id="resourceBean" class="test.org.spring.resource.ResourceBean">
<property name="resource" value="WEB-INF/config.xml"/>
</bean>
</beans>

spring配制文件

package test.org.spring.resource;

import org.springframework.core.io.Resource;

public class ResourceBean {


private Resource resource;

public Resource getResource() {
return resource;
}

public void setResource(Resource resource) {
this.resource = resource;
}
}

class代码。

运行一下一切都清楚了。

运行时记得吧包名改掉哦。。

其实看一下Spring源代码当中的恶core部分的Resource接口就知道了

最重要的是他把String形自动的改成了Resource形 。

如果有兴趣知道其中奥妙可以看一下Spring 的源代码

在这里我就不罗嗦了

[该贴被bosslee于2007年08月30日 15:17修改过]
[该贴被bosslee于2007年08月30日 15:18修改过]

必须将配置文件放在WEB-INF的classes的OperationFile目录下。

使用Spring的web.xml的context配置不是更好吗?

因为context配置会将Spring容器放入Web容器中,也就是servletContext中,这样Spring容器就有生命性,能够随着项目undeploy而消亡,防止内存泄漏。

你直接通过filer读取,那么Spring容器你就只能放入静态类中,而这很容易内存泄漏的。