• dubbo注解


    如果还不了解Dubbo是什么或者不知道怎么搭建的可以先看一下我的上一篇文章。

    首先我先来讲下提供者(也就是服务端)的配置,先上配置文件代码:

    [html] view plain copy
     
    1. <?xml version="1.0" encoding="UTF-8"?>   
    2. <beans xmlns="http://www.springframework.org/schema/beans"  
    3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    4.     xmlns:context="http://www.springframework.org/schema/context"  
    5.     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
    6.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
    7.         http://www.springframework.org/schema/beans/spring-beans.xsd   
    8.         http://www.springframework.org/schema/context   
    9.         http://www.springframework.org/schema/context/spring-context-2.5.xsd  
    10.         http://code.alibabatech.com/schema/dubbo   
    11.         http://code.alibabatech.com/schema/dubbo/dubbo.xsd   
    12.         ">   
    13.       
    14.     <!-- 提供方应用信息,用于计算依赖关系 -->  
    15.     <dubbo:application name="dubbo_provider" />  
    16.   
    17.     <!-- 使用multicast广播注册中心暴露服务地址 <dubbo:registry address="multicast://224.5.6.7:1234"   
    18.         /> -->  
    19.   
    20.     <!-- 使用zookeeper注册中心暴露服务地址 -->  
    21.     <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
    22.   
    23.     <!-- 用dubbo协议在20880端口暴露服务 -->  
    24.     <dubbo:protocol name="dubbo" port="20880" />  
    25.   
    26.     <!-- 具体的实现bean  
    27.     <bean id="demoService" class="com.unj.dubbotest.provider.impl.DemoServiceImpl" />  
    28.     -->  
    29.     <!-- 声明需要暴露的服务接口   
    30.     <dubbo:service interface="com.unj.dubbotest.provider.DemoService" ref="demoService" />  
    31.     -->  
    32.       
    33.     <!-- 使用注解方式暴露接口 -->     
    34.     <dubbo:annotation package="com.dubbo.provide" />  //相当于暴露接口
    35.       
    36.     <!-- 加入spring注解扫描 -->  
    37.     <context:component-scan base-package="com.dubbo.provide"/>  //相当于注入bean
    38. </beans>   

    下面这两句就是开启注解扫描的配置:

    [html] view plain copy
     
    1. <!-- 使用注解方式暴露接口 -->     
    2.     <dubbo:annotation package="com.dubbo.provide" />  
    3.       
    4.     <!-- 加入spring注解扫描 -->  
    5.     <context:component-scan base-package="com.dubbo.provide"/>  

    package和base-package是要扫描的位置,这些配置的意思大部分都跟spring的配置差不多,这里就不多说了。

    接下来来看下我们Service中代码注解的使用:

    [html] view plain copy
     
    1. package com.dubbo.provide.user.service.impl;  
    2.   
    3. import org.springframework.stereotype.Component;  
    4.   
    5. import com.alibaba.dubbo.config.annotation.Service;  
    6. import com.dubbo.provide.user.service.IUserService;  
    7.   
    8.   
    9. /**  
    10.  *   
    11.  * @author LiZhiXian  
    12.  * @version 1.0  
    13.  * @date 2015-9-12 下午4:44:21  
    14.  */  
    15. @Component  
    16. @Service  
    17. public class UserService implements IUserService {  
    18.   
    19.     @Override  
    20.     public String getUser() {  
    21.         return "dubbo接口调用成功......";  
    22.     }  
    23.   
    24. }  

    其中@Component就是spring bean的注解,而@Service就是dubbo本身的注解,这两个注解合起来的意思就跟我们配置文件中先声明一个bean然后再声明接口暴露的意思是一样的。

    接下来看下消费者(也就是客户端)的配置:

    我这边使用的是springmvc框架,注意:这边接口的名称以及包路径,必须和提供者暴露的接口一致,可以直接将服务端的接口导出成jar,然后在客户端引入使用。




    平时加配置文件的习惯都是按不同的功能来配置的,但是刚试了一下将dubbo单独配置,发现在注解扫描的时候扫描不到,有可能是跟spring的注解扫描发生了冲突,

    最后我将dubbo的配置集成到了springMvc-servlet.xml配置中问题就解决了。

    [html] view plain copy
     
    1. <?xml version="1.0" encoding="UTF-8"?>    
    2. <beans     
    3.     xmlns="http://www.springframework.org/schema/beans"     
    4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
    5.     xmlns:p="http://www.springframework.org/schema/p"     
    6.     xmlns:context="http://www.springframework.org/schema/context"  
    7.     xmlns:util="http://www.springframework.org/schema/util"  
    8.     xmlns:mvc="http://www.springframework.org/schema/mvc"   
    9.     xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"  
    10.     xsi:schemaLocation="http://www.springframework.org/schema/beans     
    11.     http://www.springframework.org/schema/beans/spring-beans-3.2.xsd  
    12.     http://www.springframework.org/schema/context  
    13.     http://www.springframework.org/schema/context/spring-context-3.2.xsd  
    14.     http://www.springframework.org/schema/util   
    15.     http://www.springframework.org/schema/util/spring-util-3.1.xsd  
    16.     http://www.springframework.org/schema/mvc  
    17.     http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd  
    18.     http://code.alibabatech.com/schema/dubbo   
    19.     http://code.alibabatech.com/schema/dubbo/dubbo.xsd">    
    20.        
    21.     <!-- <util:properties id="APP_PROPERTIES" location="classpath:sys.properties" local-override="true"/> -->  
    22.       
    23.     <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->  
    24.     <dubbo:application name="basic_dubbo_consumer" />  
    25.   
    26.     <!-- 使用zookeeper注册中心暴露服务地址 -->  
    27.     <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
    28.       
    29.     <!-- 启用spring mvc 注解-->  
    30.     <context:annotation-config/>  
    31.       
    32.     <!-- MVC转换 -->   
    33.     <mvc:annotation-driven/>  
    34.     <mvc:default-servlet-handler/>  
    35.       
    36.     <dubbo:annotation package="com.dubbot.service" />//生产者接口所在包  
    37.       
    38.     <!-- ①:对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 -->    
    39.     <context:component-scan base-package="com.frame." />   
    40.       
    41.     <!-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->    
    42.     <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>  
    43.   
    44.     <!-- 转换成json对象配置 -->  
    45.     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"    
    46.         p:ignoreDefaultModelOnRedirect="true" >    
    47.             <property name="messageConverters">    
    48.                 <list>    
    49.                     <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter"/>   
    50.                 </list>    
    51.             </property>    
    52.     </bean>   
    53.       
    54.     <!--  ③:对模型视图名称的解析,即在模型视图名称添加前后缀 -->    
    55.     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >    
    56.          <property name="prefix" value="/WEB-INF/pages/"></property>    
    57.          <property name="suffix" value=".jsp"></property>    
    58.     </bean>   
    59.     <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">     
    60.          <!-- 该属性用来配置可上传文件的最大 byte 数 1G -->     
    61.          <property name="maxUploadSize"><value>10737418240</value></property>   
    62.     </bean>   
    63.   
    64. </beans>    


    dubbo的配置我是加在了springMvc配置的最前面

    接下来看下我在controller中的运用

    [java] view plain copy
     
    1. package com.frame.controller;  
    2.   
    3. import org.springframework.stereotype.Controller;  
    4. import org.springframework.web.bind.annotation.RequestMapping;  
    5. import org.springframework.web.bind.annotation.ResponseBody;  
    6. import com.alibaba.dubbo.config.annotation.Reference;  
    7. import com.dubbo.provide.user.service.IUserService;  
    8.   
    9. /** 
    10.  *  
    11.  * @author LiZhiXian 
    12.  * @version 1.0 
    13.  * @date 2015-9-16 上午8:54:55 
    14.  */  
    15. @Controller  
    16. @RequestMapping(value="/user/*")  
    17. public class UserController {  
    18.   
    19.     @Reference  
    20.     IUserService userService;//调用Dubbo暴露的接口  
    21.   
    22.     @RequestMapping(value="getUser.htm")  
    23.     public @ResponseBody String getUser(){  
    24.         return userService.getUser();  
    25.     }  
    26. }  

    这变就使用到了@Reference来注入服务端爆入的接口。

    消费者端如果使用dubbo:annotation 配置,就使用@reference注入生产者暴露的接口

    如果使用dubbo:reference配置,就使用@autowired注入

  • 相关阅读:
    百度笔试题:找最小的不重复数
    [置顶] 【收藏】实用软件
    指针数组与数组指针
    根据新浪天气API获取各地天气状况(Java实现)
    项目经历——EasyUI的检索和更新操作
    利用MyEclipse配置S2SH三大框架篇-Spring配置
    Intellij IDEA 最头大的问题,如何自定义注释模板?
    Spring Cloud Gateway VS Zuul 比较,怎么选择?
    Spring Boot 注册 Servlet 的三种方法,真是太有用了!
    Spring Cloud Eureka 常用配置详解,建议收藏!
  • 原文地址:https://www.cnblogs.com/wangjing666/p/7286023.html
Copyright © 2020-2023  润新知