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

2017-11-05 16:33:02 +08:00
 xiaofdejimo

在学 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)
8500 次点击
所在节点    Java
4 条回复
yidinghe
2017-11-05 18:05:30 +08:00
private UserService userService;

因为你的代码没有正确指明 25 行在哪里,所以我猜是这个成员并没有被赋值。为什么不用 @Autowired
bxb100
2017-11-05 19:43:23 +08:00
没用过 Dubbo, 难道 Spring DI 注入不是提供实现类吗
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
2017-11-06 16:50:44 +08:00
@lishunli 这个后来我也反应过来了,我的问题我想明白了,是我调用这个消费者的时候是直接 new 出来调用的,不是通过 springIOC 给我的,所以就无法扫描到注解,是我 spring 这儿没想明白

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/403710

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX