一个电商项目的Web服务化改造7:Dubbo服务的调用,4个项目
dubbo和WebService的区别:我认为dubbo就是封装了WebService,然后提供了更多的配套功能。看jar包依赖,dubbo依赖的WebService。(青出于蓝,而胜于蓝。冰,水为之,而寒于水。)
dubbo接口和本地service接口的区别:dubbo调用的是远程方法,本地调用的本地方法
作为服务的实现方,或者说最初负责“服务化改造” 的人来说,你需要考虑到怎么简化调用方的工作,怎么测试服务方的接口。因此, 我认为需要4个项目。
1.接口项目-调用者只需要知道这个
服务调用方和服务提供方的交互接口。
定义服务的接口,公共的mobel、bean等实体类。
BrandService.java,Brand.java,BrandBean.java
dubbo服务配置:
<dubbo:reference id="brandService" interface="com.webservice.service.front.BrandService" version="1.0.0"
2.接口实现项目-服务的实现者
BrandServiceImpl.java
其它相关代码和配置
<bean id="brandService" class="com.webservice.service.impl.BrandServiceImpl"/>
<dubbo:service interface="com.webservice.service.front.BrandService" version="1.0.0"
3.本地测试项目
单元测试:mapper、dao、service
参考前一篇的单元测试代码,初始化+标准4步
4.dubbo远程测试项目
单元测试:service(不可能知道dao和mapper的实现),参考上一篇单元测试代码
Java应用测试:service,调用方也可能是普通的Java应用程序调用(模拟真实场景1)
public class BrandServiceTest {
public static void main(String[] args) {
String configLocation = "classpath*:spring-context-nodubbo.xml";
configLocation = "spring-context-dubbo.xml";
ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext(
configLocation);
classPathXmlApplicationContext.start();
BrandService brandService = (BrandService) classPathXmlApplicationContext
.getBean("brandServiceImpl");
//BrandService brandService = (BrandService) classPathXmlApplicationContext
// .getBean(BrandService.class);
//找不到,名字是brandServiceImpl,或者根据类型
//BrandService brandService = (BrandService) classPathXmlApplicationContext
// .getBean("brandService");
List<Brand> brandList = brandService.listAll();
for (Brand brand : brandList) {
System.out.println("=====================================");
System.out.println(brand.getName());
System.out.println("=====================================");
}
classPathXmlApplicationContext.close();
}
}
@Controller
@RequestMapping("brand")
public class BrandController { @Autowired
private BrandService brandService; @ResponseBody
@RequestMapping("listAll")
public List<Brand> listAll(){
return brandService.listAll();
} }
个人观察:面向接口编程。接口调用方,只知道接口,而不知道实现, 真是不错。
一个电商项目的Web服务化改造7:Dubbo服务的调用,4个项目的更多相关文章
- 一个电商项目的Web服务化改造
一个电商项目的Web服务化改造 项目,早期是随便瞎做的,没啥架构,连基本的设计也没. 有需求,实现需求,再反复修改. 大致就是这么做的. 最近,项目要重新架构,和某boss协商的结果是,采用阿里开源的 ...
- 一个电商项目的Web服务化改造6:单元测试4步走,构造数据、执行操作、断言、回滚
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 单元测试,在很早之前的文章已经介绍过. 可以在这里看到相关的 ...
- 一个电商项目的Web服务化改造3:改进方案の规范和约定、单表、单一职责
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 上一篇,我们描述了原有项目中的问题. 或者说是,本篇的基本 ...
- 一个电商项目的Web服务化改造5:面向服务的分层架构设计(有图有真相)
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 本篇,以我亲自画的3个图,阐述一下架构设计. 一.分层架构-总体图 ...
- 一个电商项目的Web服务化改造4:方案和架构,通用接口的定义和实现
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步. 上一篇,我们明确了我们的"规范和约定". 从 ...
- 一个电商项目的Web服务化改造2:现有项目的5个问题
最近一直在做一个电商项目,需要把原有单系统架构的项目,改造成基于服务的架构,SOA. 有点挑战,做完了,会有很大进步, 1.现有项目的问题 1.1代码风格不统一 不同的 ...
- 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...
- 如何一步一步用DDD设计一个电商网站(十)—— 一个完整的购物车
阅读目录 前言 回顾 梳理 实现 结语 一.前言 之前的文章中已经涉及到了购买商品加入购物车,购物车内购物项的金额计算等功能.本篇准备把剩下的购物车的基本概念一次处理完. 二.回顾 在动手之前我对之 ...
- 如何一步一步用DDD设计一个电商网站(七)—— 实现售价上下文
阅读目录 前言 明确业务细节 建模 实现 结语 一.前言 上一篇我们已经确立的购买上下文和销售上下文的交互方式,传送门在此:http://www.cnblogs.com/Zachary-Fan/p/D ...
随机推荐
- android5.1 Recovery添加从U盘升级功能【转】
本文转载自:http://blog.csdn.net/tfslovexizi/article/details/73835594 之前看到过一个人写了4.4上添加U盘升级功能的博客http://blog ...
- codeforce 1073E. Segment Sum
看到这个就是数位DP了,然而细节极多,对于i=1状态直接判了,还有最后一位直接算了 设f[i][zt][0/1]表示枚举到第i位,用了那些数字,是否有前导0(前导0不计入数字,否则就不知道后面有没有0 ...
- ASP.NET Web Projects
https://msdn.microsoft.com/en-us/library/ywdtth2f.aspx The topics in this section describe how to cr ...
- 使用 StackExchange.Redis 封装属于自己的 RedisHelper
目录 核心类 ConnectionMultiplexer 字符串(String) 哈希(Hash) 列表(List) 有序集合(sorted set) Key 操作 发布订阅 其他 简介 目前 .NE ...
- bzoj 5090 组题
题目大意: 一个数列,求一段长度不少于k的数 使平均值最大 思路: 把所有数列里的数,转换为(i,sum i)的点 然后求一个下凸包,在这个过程中对于长度特殊处理一下,使栈内至少有一段长度大于等于k ...
- EasyUI 之 easyui-datagrid 字段格式化
后台返回的json格式: 列表字段要显示username 用户的真实姓名: formatter="formatterByUserName" <table id="d ...
- 题目收藏夹(啥时候一遍A啥时候删)
以下题目为没有思路或代码离谱错误或看了题解才会的,间隔一周以上再做一遍A掉就删. bzoj1500 bzoj2287 codevs1358 bzoj1725
- javascript中window,document,body的解释
解释javascript中window,document,body的区别: window对象表示浏览器中打开的窗口,即是一个浏览器窗口只有一个window对象. document对象是载入浏览器的ht ...
- 题解报告:hdu 1564 Play a game(找规律博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1564 Problem Description New Year is Coming! ailyanlu ...
- 数据清洗——python定位csv中的特定字符位置
之前发过一篇关于定位csv中的特殊字符的,主要是用到了python的自带的函数,近期又遇到了一些新的问题,比如isdigit()的缺点在于不能判断浮点型,以及小数中有多个小数点的情况.发现还是正则表达 ...