在项目中,经常要用到读系统文件.在项目的遗留代码中,都是在系统启动是传入一个APP_HOME,然后根据相对路径去读文件.这样做的缺点是比较难测试,而且自动化的测试更难.
比如说有这样一个类Server,要根据server.properties来初始化,一开始的代码是这样的:
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
/**
* @author sting
*/
public class Server {
private static final String FILE = "conf" + File.separator + "server.properties";
public void initial() throws IOException {
FileInputStream in = new FileInputStream(System.getProperty("APP_HOME") + File.separator + FILE);
Properties properties = new Properties();
properties.load(in);
// initial
}
}
文件路径和文件名都是hard code,很难测试. 我们首先把initial()重构一下,代码如下:
public void initial(InputStream in) throws IOException {
Properties properties = new Properties();
properties.load(in);
// initial
}
至少,测试时,我们可以传进来自己的InputStream,也可以方便的时候测试用的server.properties,或者干脆使用内联的文件,代码如下:
class ServerTest extends TestCase {
private Server server;
public void setUp() throws Exception {
this.server = new Server();
}
public void testInitial() throws Exception {
String serverProperties = "port=8080\n" +
"run_mode=normal";
InputStream in = new ByteArrayInputStream(serverProperties.getBytes());
this.server.initial(in);
// assert
}
}
但是,在实际工作的代码中,文件名和路径依然要hard code进代码中.这时,我们可以使用spring中的Resource接口来进一步改进我们的代码.
public class Server {
private Resource resource;
public void setResource(Resource r) {
this.resource = r;
}
public void initial() throws IOException {
Properties properties = new Properties();
properties.load(this.resource.getInputStream());
// initial
}
}
再加一段spring的配置文件:
<beans>
<bean id="server" class="Server">
<property name="resource" value="classpath:server.properties"/>
</bean>
</beans>
这样,Server的代码完全与文件的具体路径和文件名无关,仅仅用配置文件就可以指定,表达更清楚,也更易于测试.
当然,仅限于已经使用spring的项目.
分享到:
相关推荐
在本场景中,我们关注的是如何利用Spring的`Resource`接口来读取配置文件。这在Java应用程序,尤其是Spring应用中是常见的需求,因为配置文件通常用于设置应用的环境变量、数据库连接信息等。 `Resource`接口是...
总结起来,Spring提供了多种方式读取JAR内配置文件,包括`@PropertySource`、`@ConfigurationProperties`以及直接使用`Resource`接口。理解这些方法的使用和它们之间的差异对于开发和维护复杂的Spring应用至关重要。...
在Spring框架中,Resource管理是核心功能之一,它允许我们以统一的方式处理各种类型的资源,如文件、网络连接、输入/输出流等。本篇将深入解析Spring如何管理和操作Resource,以及其在实际开发中的应用。 一、...
在本教程中,我们将探讨如何使用 Spring Batch 读取文本(txt)文件,并将读取到的数据处理后写入数据库。 首先,我们需要创建一个 Maven 项目,并在 `pom.xml` 文件中添加必要的依赖。这些依赖包括 `spring-boot-...
3. **使用Spring的Resource和InputStream**:Spring框架提供了`Resource`接口,可以方便地操作各种类型的资源,包括本地文件。你可以使用`ClassPathResource`读取类路径下的JSON文件: ```java Resource resource ...
本文将深入探讨如何在Spring Boot中访问并读取`Resource`目录下的文件,特别是PDF文件。 1. **静态资源的默认配置** Spring Boot默认提供了对静态资源(如CSS、JavaScript、图片等)的处理。它会自动配置`...
总结来说,Spring的ClassPathResource是处理类路径资源的强大工具,它使开发者能够方便地加载和使用类路径中的文件,如XML配置文件,进而实现bean的初始化和管理。在学习和应用过程中,结合具体场景和需求,我们可以...
本篇文章将深入探讨如何在Spring中读取不同目录下的配置文件,以及使用`ClassPathXmlApplicationContext`和`FileSystemXmlApplicationContext`这两种不同的上下文环境来加载它们。 首先,让我们了解`...
1. 加载XML文件:通过`Resource`接口加载指定的XML配置文件,`ClassPathResource`是常用的实现类,可以从类路径中加载资源。 2. 解析XML:使用`DocumentBuilder`解析XML文档,获取DOM树。 3. 遍历DOM树:`...
在上面的代码中,我们使用getContextClassLoader().getResourceAsStream()方法来读取资源文件,并将其转换为InputStream对象,以便读取文件内容。 测试用例 下面是一个测试用例,用于演示上述两种方法: ```java ...
除了直接通过 ApplicationContext 或者 ContextLoaderListener 加载配置文件,还可以在现有的 XML 配置文件中使用 `<import>` 标签导入其他的配置文件。这种方式允许开发者在主配置文件中引用其他辅助配置文件,...
本文将深入探讨如何在JSP中使用Spring的`Resource`类来读写包含中文字符的`Properties`文件。`Resource`类是Spring提供的一种抽象资源访问接口,它可以处理各种类型的资源,如文件系统、类路径、URL等。 首先,我们...
Spring如何使用PropertyPlaceholderConfigurer读取文件 Spring框架中,PropertyPlaceholderConfigurer是一个非常重要的组件,它可以帮助我们读取配置文件,实现系统的配置信息统一管理。在大型项目中,我们往往会将...
在上述代码中,我们使用`FileInputStream`读取文件,并将其封装为`InputStreamResource`对象,然后设置响应头信息,包括文件名称、内容类型等,并最终返回给客户端。 ### 总结 通过上述步骤,我们可以在Spring ...
下面将详细介绍如何在Spring中使用属性文件以及相关知识点。 1. **属性文件格式** 属性文件通常以`.properties`为扩展名,例如`application.properties`或`database.properties`。文件中的键值对以等号`=`分隔,如...
在 Spring Boot 项目中读取静态资源文件可以使用 ClassPathResource 来实现,但是我们需要注意如果静态资源文件在 JAR 包中,我们需要使用 getInputStream() 方法来获取输入流,而不是使用 getFile() 方法来获取文件...
1. **加载XML文件**:Spring使用`Resource`接口表示资源位置,可以是类路径、文件系统或URL。`XmlBeanDefinitionReader`类负责读取XML文件并将其转换为bean定义。 2. **解析XML**:`XmlBeanDefinitionReader`使用...
`PropertyPlaceholderConfigurer`是Spring早期版本中处理属性文件的工具,而`@PropertySource`则是从Spring 3.1引入的新特性,它们都可以用来从外部属性文件中读取值并注入到bean中。 1. `...
这里的`springProperty`标签会从Nacos中读取`logging.config`配置项,然后将其作为`appender-ref`的引用。 `bootstrap.yml`文件是Spring Boot应用的启动配置,它在应用程序启动时加载,用于初始化环境属性。在Nacos...
在Spring MVC项目中,加载jar包中的Spring配置文件是一个常见的需求,特别是在进行SSM(Spring、Spring MVC、MyBatis)整合时。SSM框架的整合通常涉及到多个配置文件的组织和管理,其中一部分配置可能会被打包到独立...