Dubbo应用开发之Dubbo中注解详解
这里主要讲解关于上一篇springboot方式开发Dubbo应用中出现的三个注解,分别为@EnableDubbo,@DubboService,@DubboReference.
@EnableDubbo注解作用
-
@EnableDubbo ⽤于扫描@DubboService 并把对应的对象实例化,发布成RPC服务。
-
扫描的路径:应⽤这个注解的类(启动类)所在的包及其⼦包。
如果@DubboService注解修饰的类没有放到@EnableDubbo注解修饰类当前包及其⼦包
- 其实这个问题跟@SpringbootApplication是一样的都可以通过指定包名的方法解决,可以通过@DubboComponentScan(basePackages ={"org.hust.service"}),显示的指定扫描的路径
- yml进⾏配置扫描@DubboService 并把对应的对象实例化,发布成RPC服务
dubbo:
scan:
base-packages: org.hust.service
这里又引出了一个问题,为什么@EnableDubbo注解可以不加,但是我们一般建议加上
在 Dubbo 开发中,@EnableDubbo 注解不是必须手动加的原因,是因为 Spring Boot 的自动装配机制已经帮你默认开启了 Dubbo 的功能。这意味着:
- 只要你引入了
dubbo-spring-boot-starter - 并且没有手动设置
dubbo.enabled=false - Dubbo 会自动配置好并生效,无需手动加
@EnableDubbo
什么时候需要手动加 @EnableDubbo
| 场景 | 是否需要加 |
|---|---|
使用 Spring Boot + dubbo-spring-boot-starter | ❌ 不需要 |
| 使用纯 Spring(非 Boot),手动装配 Dubbo | ✅ 需要加 |
想自定义扫描包路径(如 @EnableDubbo(scanBasePackages = "...")) | ✅ 可以加 |
禁用了自动配置(如 exclude = DubboAutoConfiguration.class) | ✅ 需要加 |
总结
只要你用的是 Spring Boot + Dubbo Starter,
@EnableDubbo可以不写,Dubbo 会自动启用。 只有在非 Boot 环境或需要自定义扫描路径时才需要显式加。
@DubboService注解的作⽤
-
应⽤@DubboService注解修饰类型,SpringBoot会创建这个类型的对象,并发布成Dubbo服务
-
@DubboService 等同于 @Component(@Service) @Bean注解的创建对象的作⽤
-
后续开发过程中如果考虑兼容性,建议实现类不仅仅要加⼊@DubboService注解,同时也要加⼊@Service注解
@DubboReference注解的作⽤
-
在Consumer端,通过@DubboReference,注⼊远端服务的代理对象
-
@DubboReference类似于原始Spring开发中@Autowired注解的作⽤