duboo注解使用详解

简介: 当越来越的的接口与实现类的增加后,duboo的xml配置会越来越多,为了防止几百几千行的代码,减少开发人员配置xml的工作量,使用duboo的注解模式,减少配置多出问题多的可能性!

一、背景


随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行。


当越来越的的接口与实现类的增加后,duboo的xml配置会越来越多,为了防止几百几千行的代码,减少开发人员配置xml的工作量,使用duboo的注解模式,减少配置多出问题多的可能性!


二、Dubbo使用案例


Duboo注解


接口类项目:DubboServiceInterface


微信图片_20220430174642.png 



仅仅是一个接口类项目!接口是普通接口!


微信图片_20220430174645.png 

注意:将接口类项目打包成jar分别放入服务端项目跟客户端项目!


服务端项目:DubboServiceProvider


微信图片_20220430174648.png 



实现类fooserviceImpl.java


微信图片_20220430174652.png 

微信图片_20220430174656.png 

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
  <display-name>DubboServiceProvider</display-name> 
<servlet> 
<servlet-name>spring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
<load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
<servlet-name>spring</servlet-name> 
<url-pattern>*</url-pattern> 
</servlet-mapping> 
  <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
    <context-param> 
<param-name>contextConfigLocation</param-name> <param-value>classpath*:applicationContext.xml</param-value> 
</context-param> 
</web-app> 


applicationContext.xml 配置


微信图片_20220430174659.png


<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans

     

       http://www.springframework.org/schema/beans/spring-beans.xsd  

       http://code.alibabatech.com/schema/dubbo  

       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  

       

<!-- 服务端- 服务提供方 --> 
  <!-- 公共信息,也可以用dubbo.properties配置 --> 
  <dubbo:application name="test" /> 
<!--   链接zookeeper --> 
  <dubbo:registry address="zookeeper://127.0.0.1:2181/" group="test"/> 
  <dubbo:consumer timeout="5000"/> 
  <!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 --> 
<dubbo:annotation package="com.unj.dubbotest.serviceImp" /> 
<!-- xml配置 : 声明需要暴露的服务接口 --> 
<!--      <dubbo:service interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" /> --> 
   <!-- xml配置 :和本地bean一样实现服务--> 
<!--     <bean id="demoService" class="com.unj.dubbotest.serviceImp.FooServiceImpl" /> --> 
</beans>


测试类Provider


微信图片_20220430174702.png 

package com.alibaba.dubbo.test; 
import java.io.IOException; 
import org.junit.Before; 
import org.junit.Test; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
public class Provider { 
@Before 
public void setUp() throws Exception { 
} 
@Test 
public void testMain() throws IOException { 
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( 
new String[] { "applicationContext.xml" }); 
context.start(); 
System.in.read();// 按任意键退出 
} 
}


lib下的jar包


微信图片_20220430174705.png 


客户端项目:DubboServiceConsumer


微信图片_20220430174708.png 


web.xml 配置扫描内容


微信图片_20220430174711.png 


applicationContext.xml文件


微信图片_20220430174714.png

 

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans"  
xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans

 

       http://www.springframework.org/schema/beans/spring-beans.xsd  

       http://code.alibabatech.com/schema/dubbo  

       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  

       

<!-- 客户端- 服务消费方 --> 
  <!-- 公共信息,也可以用dubbo.properties配置 --> 
  <dubbo:application name="xx" /> 
  <dubbo:registry address="zookeeper://127.0.0.1:2181" /> 
  <dubbo:consumer timeout="5000"/> 
<!-- 扫描注解包路径,多个包用逗号分隔,不填pacakge表示扫描当前ApplicationContext中所有的类 --> 
    <dubbo:annotation package="com.unj.dubbotest.action" /> 
</beans>


测试类:Consumer


微信图片_20220430174717.png

 

package com.unj.dubbotest.action; 
import java.io.IOException; 
import org.junit.Test; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 
import com.alibaba.dubbo.config.annotation.Reference; 
import com.alibaba.dubbo.demo.DemoService; 
public class Consumer{ 
@Reference(version = "1.0") 
private DemoService demoService; 
@Test 
public  void mainTest() throws IOException { 
ClassPathXmlApplicationContext context =new ClassPathXmlApplicationContext( 
new String[] {"applicationContext.xml"}); 
        context.start(); 
         demoService = (DemoService)context.getBean("demoService"); // 获取远程服务代理 
        String hello = demoService.sayHello("world"); // 执行远程方法 
        System.out.println( hello ); // 显示调用结果 
    } 
}



lib下的jar包


微信图片_20220430174720.png 


相关文章
|
Java 开发者
使用HashMap的values()方法返回的值转换为List时遇到错误
使用HashMap的values()方法返回的值转换为List时遇到错误
【资源分享】阿里云盘资源永久汇总页
不知道大家的阿里云盘现在有多少容量了?阿里为了资源也为了网盘活跃度,在九月推出限时活动,分享赢10T容量。因此带来了这一波的阿里盘分享热潮,当然大部分人都是奔着10T去的。所以网上资源翻来覆去的很多,重复的也多。正因如此空空发现了一位网友非常的有心,将分享出来网盘资源进行了梳理汇总,并且搭建了这个终极阿里云盘资源整合网站——【阿里云盘资源永久汇总页】。
245909 11
【资源分享】阿里云盘资源永久汇总页
|
负载均衡 监控 Dubbo
秒懂Dubbo接口(原理篇)
【4月更文挑战第25天】秒懂Dubbo接口(原理篇)
1121 3
秒懂Dubbo接口(原理篇)
springboot字段注入@value细节
springboot字段注入@value细节
211 1
JVM内存参数
-Xmx[]:堆空间最大内存 -Xms[]:堆空间最小内存,一般设置成跟堆空间最大内存一样的 -Xmn[]:新生代的最大内存 -xx[use 垃圾回收器名称]:指定垃圾回收器 -xss:设置单个线程栈大小 一般设堆空间为最大可用物理地址的百分之80
|
JSON JavaScript 前端开发
Jackson学习笔记
这篇文章是关于Jackson库的学习笔记,提供了Jackson工具包的下载方法,如何在IDEA中使用Maven导入Jackson依赖,以及如何在SpringMVC中使用Jackson进行JSON数据的转换和处理。
Jackson学习笔记
|
安全 存储
Shiro源码剖析——Subject的创建与获取(一次完整的请求执行流程-1
本文可能较长,但是通读一定能让你对整个shiro请求的执行流程有清晰的了解 总体流程: 1、在过滤的过程中创建subject doFilter -&gt; SecurityManager -&gt; SubjectContext -&gt; 创建subject -&gt; 解析各种信息并赋值 2、若该subject未认证则进行认证并在认证时再次创建subject 调用realm中的doAuthenticationInfo()获得返回的信息重新创建subject并保存到session
|
自然语言处理 Java
ElasticSearch 实现分词全文检索 - term、terms查询
ElasticSearch 实现分词全文检索 - term、terms查询
490 0
|
负载均衡 Dubbo Java
深入理解@DubboReference与@DubboService【三】
深入理解@DubboReference与@DubboService【三】
1563 1
|
前端开发 JavaScript
怎么让input框在用户输入后,文字居中显示
怎么让input框在用户输入后,文字居中显示
675 0