在项目中,经常要用到读系统文件.在项目的遗留代码中,都是在系统启动是传入一个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开发的依赖包和配置文件,只有引用就行
spring使用resource注解的demo,依赖的库是spring core,建议通过myeclise添加。
利用spring resource读取配置文件。
spring-resource-handling, Spring Framework 4.1资源处理示例 spring-资源处理 这里应用程序演示 Spring Framework 4.1中的新资源处理功能。 它最初是为在 4.1中讨论资源而开发的,在 SpringOne2GX 2014中讨论。...
Java使用Maven导入Spring依赖
主要介绍了Spring实战之使用@Resource配置依赖操作,结合实例形式分析了Spring使用@Resource配置依赖具体步骤、实现及测试案例,需要的朋友可以参考下
介绍如何使用MyEclipse查看Spring的依赖视图,图文并茂,使用的是MyEclipse8.5版本
基于Spring Boot的文件管理系统,支持文件上传,下载,删除等操作,在线浏览文件列表及基本信息等操作。部署简单,Java课程设计必备。 依赖软件: 1、jdk1.8+ 2、maven 开发调试方法: 解压压缩包,导入IDE,...
公司的java项目中spring使用注解依赖jar
文件中进行了详细介绍说明这个配置文件是典型XML格式但是它既冗长又不实用对于需要定义大量 Springbeans大工程来说我们难以阅读和管理它 在这篇文章里对于SpringXML配置我将向你展示12种比较好实战其中些实战不仅...
本项目集成Minio的java客户端SDK,对Minio文件服务器进行读写,将操作封装为MinioUtil工具,直接在项目中可以复用。其操作主要包括: 上传文件 下载文件 读取桶列表 读取桶中的文件列表 删除桶 删除文件 Spring ...
使用spring-cloud-security-oauth2来实现oauth server和resource server,oauth Server和resource Server分开,resource Server实现了两种方式
Spring框架依赖jar包,其中最小依赖包:org.springframework.core、org.springframework.context、org.springframework.beans、org.springframework.asm、org.springframework.expression、...
Spring集成SpringSecurity依赖包.也有springMVC的依赖包,直接下载引入就可用
SpringCloud分布式微服务项目Common通用依赖模块抽离示例代码 SpringCloud分布式微服务项目Common通用依赖模块抽离示例代码 SpringCloud分布式微服务项目Common通用依赖模块抽离示例代码 SpringCloud分布式微服务...
spring-session+spring依赖jar包,包含spring4.0.2.RELEASE相关jar包和commons-pool2-2.4.2.jar,jedis-2.7.3.jar,spring-data-redis-1.6.2.RELEASE.jar,spring-session-1.1.1.RELEASE.jar
NULL 博文链接:https://forestqqqq.iteye.com/blog/2235292
Spring mvc依赖包 Spring mvc都做了些什么 Controller为中心完成对系统流程的控制管理 从请求中搜集数据 对传入的参数进行验证 将结果返回给视图 针对不同的视图提供不同的解决方案 针对jsp视图技术提供标签库 拦截...
javaEE 开发中 现在最成熟的框架之一应该就是spring了 spring框架最强大的地方就是实现了依赖注入 也叫控制反转 最近的一个项目中用的就是 spring框架 spring框架是工厂模式的应用结合了MVC的设计思想 大家可以...
spring 事务传播与隔离级别DEMO 脏读、重复读、幻影读 spring 事务传播与隔离级别DEMO 脏读、重复读、幻影读