SOA下的MOCK接口

来源:互联网 发布:js json特殊字符处理 编辑:程序博客网 时间:2024/05/22 03:27

现在都在讲SOA,很多公司也是这么做的,这样做的好处我就不再这里重复了。SOA带来这些优点的同时也带来了很大的困扰,特别是在开发环境下,接口不稳定、频频挂掉,有时开发环境不如线上的数据那么丰富,想要的数据要不到,严重影响开发的进程。这种痛苦,想想就泪两行。哭归哭,哭够了,就得想一个下次不哭的方法。

在考虑解决方案时,我想尽可能的简单,尽可能的不侵入代码,于是想来想去,就下定决心要用配置的方式。在死了N多脑细胞的时候,我终于想到,下面就是我的方案,使用的是spring的注入机制。

1. 项目结构如下:


项目结构的关键是mock和线上的接口除了上一级包之外都是一致的,这样就可以通过配置包名称注入不同的类

2. 接口如下:

public interface InterfaceService {    String mockInterface();}

3. 接口实现如下:

mock的接口:

public class InterfaceServiceImpl implements InterfaceService {    @Override    public String mockInterface() {        return "这是一个mock的接口";    }}


正式的接口

public class InterfaceServiceImpl implements InterfaceService {    @Override    public String mockInterface() {        return "这是一个线上的接口";    }}


4. 配置文件(这个是重点):

 <bean id="interfaceService" class="com.xten.mock.service.${interface_type}.InterfaceServiceImpl"></bean>

这个的关键是将他的上一层包通过配置文件进行配置,那么就可以很简单的切换接口的环境,又不侵入到业务逻辑。

正式环境配置:interface_type=impl

mock环境配置:interface_type=mock

5. 测试用例如下:

public class MockTest {    public static void main(String[] args){        try {            ApplicationContext context = new ClassPathXmlApplicationContext("spring/mock/mock.xml");            InterfaceService interfaceService =context.getBean(InterfaceService.class);            System.out.println(interfaceService.mockInterface());        } catch (BeansException e) {            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.        }    }}



各位可以自行测试一下。





0 0
原创粉丝点击