一个电商项目的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 ...
随机推荐
- Android横竖屏切换不重新调用onCreate()
再次感叹Android的碎片化!!!! 设置AndroidManifest.xml中Activity的android:configChanges=”keyboardHidden|orientation ...
- git reset --hard 回滚以后 以后怎么再回去?
恢复的过程很简单: 通过git log -g命令来找到需要恢复的信息对应的commitid,可以通过提交的时间和日期来辨别,找到执行reset --hard之前的那个commit对应的commitid ...
- bzoj2841
边双联通分量 具体详解蓝书上十分详细,因为必须是奇数个人坐在一起,那么一个人如果能选上,就必须处在一个简单奇圈中.而奇圈也是一个边双联通分量,所以我们先把边双联通分量都挖出来,然后进行二分图染色. 奇 ...
- MSP430:中断简介
(5).中断应用程序举例(外部中断): void interrupt_initial() { P1DIR&=~BIT7; //P1.7为输入 P1IE|=0x80; //P ...
- 354 Russian Doll Envelopes 俄罗斯娃娃信封
You have a number of envelopes with widths and heights given as a pair of integers (w, h). One envel ...
- Android基础TOP2_1:输出系统时间
Activity: <TextView android:id="@+id/tv" android:layout_width="wrap_content" ...
- STL之vector篇
#include<iostream> #include<cstdio> #include<cstring> #include<vector> #incl ...
- Tcl之Lab1
Task 1. Use help 1) What is the default switch for the redirect command? -file help -v redirect # or ...
- (一)Python 学习第一天--基础知识,列表
1. .pyc文件 .pyc文件:在python3中,当模块运行时会自动生成在_pycache_文件夹中,其中c为compiled的缩写. Python是一门现编译后解释的语言,在运行时首先寻找.py ...
- (转)Hibernate中的多表操作
http://blog.csdn.net/yerenyuan_pku/article/details/70556208 Hibernate中的多表操作 在实际开发中,我们不可能只是简简单单地去操作单表 ...