zoukankan      html  css  js  c++  java
  • 一个电商项目的Web服务化改造7:Dubbo服务的调用,4个项目

    使用dubbo服务的过程,很简单,和之前学习的WebService完全一样,和本地接口调用也基本一致。

        
    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"
       url="webservice://127.0.0.1:9000/com.webservice.service.front.BrandService"/>
     
    2.接口实现项目-服务的实现者 
       BrandServiceImpl.java
       其它相关代码和配置
      
    <bean id="brandService" class="com.webservice.service.impl.BrandServiceImpl"/>
       
     <dubbo:service interface="com.webservice.service.front.BrandService" version="1.0.0"
       protocol="webservice" ref="brandService"/>
     
    3.本地测试项目 
       单元测试:mapper、dao、service
       参考前一篇的单元测试代码,初始化+标准4步

    4.dubbo远程测试项目 
       
    单元测试:service(不可能知道dao和mapper的实现),参考上一篇单元测试代码
       
    Java应用测试:service,调用方也可能是普通的Java应用程序调用(模拟真实场景1)
       Web应用测试 service,调用方,有较大可能是Web项目调用(模拟真实场景2)

     
     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();
    	}
    	
    }

     
     个人观察:面向接口编程。接口调用方,只知道接口,而不知道实现, 真是不错。
  • 相关阅读:
    Retrofit 2使用要点梳理:小白进阶回忆录
    浅析Android动画(三),自定义Interpolator与TypeEvaluator
    浅析Android动画(二),属性动画高级实例探究
    浅析Android动画(一),View动画高级实例探究
    Retrofit 2使用要点梳理:浅析POST文件/表单上传
    AS历史代码记录,找回本地未提交代码
    注解基础篇:自定义Java Annotation
    注解提高篇:自定义注解处理器(APT)
    AndroidStudio快捷键大全
    VisualStudio2015常用快捷键
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462423.html
Copyright © 2011-2022 走看看