V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
xiaofdejimo
V2EX  ›  Java

求教 Dubbo 的使用注解 annotation 报 null 指针问题

  •  
  •   xiaofdejimo · 2017-11-05 16:33:02 +08:00 · 8504 次点击
    这是一个创建于 2566 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在学 dubbo,想用注解,然后消费方一直报空指针,我先声明没加入 SpringMVC 或者 boot 导致加载顺序出错,我就是纯 spring 下写 demo 学习,贴一下我的配置和代码,求大佬指点问题所在

    提供方 xml

    <!-- 加入 spring 注解扫描 -->
    <context:component-scan base-package="com.hanting"/>
    
    <!--计算依赖关系-->
    <dubbo:application name="provider"/>
    <!--使用 zookeeper 注册中心暴露服务-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    <!-- 用 dubbo 协议在 20880 端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880"/>
    
    <!-- 使用注解方式暴露接口 -->
    <dubbo:annotation package="com.hanting"/>
    
    <!-- 接口-->
    <dubbo:service interface="com.hanting.service.UserService" ref="userService" />
    

    提供方 impl

    import com.alibaba.dubbo.config.annotation.Service;
    import com.hanting.service.UserService;
    import org.springframework.stereotype.Component;
    @Component("userService")
    @Service()
    public class UserServiceImpl implements UserService {
    ...
    }
    

    消费方 xml

    <dubbo:application name="consumer"/>
    <!--向 zookeeper 订阅 provider 的地址,由 zookeeper 定时推送-->
    <dubbo:registry address="zookeeper://localhost:2181"/>
    
    <!--使用 dubbo 协议调用定义好的 api.PermissionService 接口-->
    <dubbo:reference id="userService" interface="com.hanting.service.UserService"/>
    
    <!-- 使用注解方式暴露接口 -->
    <dubbo:annotation package="com.hanting"/>
    
    <!-- 加入 spring 注解扫描 -->
    <context:component-scan base-package="com.hanting"/>
    

    消费方测试

    import com.alibaba.dubbo.config.annotation.Reference;
    import com.hanting.service.UserService;
    import org.springframework.stereotype.Component;
    
    @Component
    public class UserTest {
    
        @Reference
        private UserService userService;
    
        public void test() {
            userService.addUser("aaa");
        }
    }
    

    消费方的 console

    consumer start...
    Exception in thread "main" java.lang.NullPointerException
    at com.hanting.controller.UserTest.test(UserTest.java:25)
    at Consumer.main(Consumer.java:19)
    
    4 条回复    2017-11-06 16:50:44 +08:00
    yidinghe
        1
    yidinghe  
       2017-11-05 18:05:30 +08:00
    private UserService userService;

    因为你的代码没有正确指明 25 行在哪里,所以我猜是这个成员并没有被赋值。为什么不用 @Autowired
    bxb100
        2
    bxb100  
       2017-11-05 19:43:23 +08:00
    没用过 Dubbo, 难道 Spring DI 注入不是提供实现类吗
    lishunli
        3
    lishunli  
       2017-11-06 09:07:08 +08:00
    提供方删除
    <context:component-scan base-package="com.hanting"/>
    <dubbo:service interface="com.hanting.service.UserService" ref="userService" />

    消费方删除
    <dubbo:reference id="userService" interface="com.hanting.service.UserService"/>
    <context:component-scan base-package="com.hanting"/>

    dubbo:annotation 就已经包含了上面的,再试试
    xiaofdejimo
        4
    xiaofdejimo  
    OP
       2017-11-06 16:50:44 +08:00
    @lishunli 这个后来我也反应过来了,我的问题我想明白了,是我调用这个消费者的时候是直接 new 出来调用的,不是通过 springIOC 给我的,所以就无法扫描到注解,是我 spring 这儿没想明白
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1393 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 17:40 · PVG 01:40 · LAX 09:40 · JFK 12:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.